当前位置: 首页 > news >正文

厦门企业建网站制作网上有做口译的网站么

厦门企业建网站制作,网上有做口译的网站么,网上注册公司在哪个平台注册,南宁制作网站公司Linux常用工具 一、Linux 项目自动化构建工具 - make/Makefile1. 依赖关系和依赖方法2. 伪目标3. make/Makefile 具有依赖性的推导能力#xff08;语法扩展#xff09;4. 编写一个进度条代码#xff08;1#xff09;缓冲区#xff08;2#xff09;\n 和 \r#xff08;3语法扩展4. 编写一个进度条代码1缓冲区2\n 和 \r3进度条代码 二、Linux 版本控制器 - git1. git clone2. git config3. git add4. git commit5. git push6. git pull 三、Linux 调试器 - gdb1. 查看指令2. 断点3. 开始调试4. 其他指令5. 总结 一、Linux 项目自动化构建工具 - make/Makefile 一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile 定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作。 在 windows 操作系统中比如 vs2019 这款编译器有了图形化界面我们可以直接一键生成解决方案即编译但在 Linux 系统中需要我们使用 gcc 或 g 手动进行编译工作当我们需要编译的文件多起来时就降低了我们的工作效率。 所以我们接下来学习一个工具 make 和 Makefile Makefile 带来的好处就是 ——“自动化编译”一旦写好只需要一个 make 命令整个工程完全自动编译极大的提高了软件开发的效率make是一个命令工具是一个解释 Makefile 中指令的命令工具一般来说大多数的 IDE 都有这个命令。 1. 依赖关系和依赖方法 我们先简单看一看 make 和 Makefile 的使用我们先 touch 一个 Makefile 文件和一个普通文件 我们在 test.c 文件中随便写一些代码 随后我们进入 Makefile 文件中写入依赖关系和依赖方法 其中 mytest:test.c 表明 mytest 这个将要生成的可执行程序依赖于test.c 文件而 gcc test.c -o mytest 则是相应依赖关系的依赖方法即解决方法即怎样才能让 test.c 得到 mytest. .PHONY 是定义一个伪目标 clean伪目标的特性是总是被执行的这个特性我们稍后再介绍。 随后 clean: 表明 clean 没有依赖关系其依赖方法是 rm -f mytest 这一步即进行了项目的清理工作。 我们看使用我们在命令行中执行 make即进行了项目的编译工作 随后我们执行这个程序观察 可以看到是正常执行的然后我们对这个项目进行清理工作 这样就完成了项目的编译和清理工作注意我们使用 make 的时候默认执行第一个依赖关系和方法往后的需要我们自行指定例如我们将上面的编译和清理的依赖关系和依赖方法反过来如图 随后我们执行 make 观察结果 可以看到默认是执行了第一个依赖关系随后我们执行编译的依赖关系和方法 这样也可以正常使用但是我们通常使用的是第一种即编译放在前面清理放在最后。 2. 伪目标 我们上面所说的 .PHONY: 后面所跟的就是伪目标一般我们这种 clean 的目标文件我们将它设置为伪目标用 .PHONY 修饰伪目标的特性是总是被执行的。 1如何理解总是被执行呢 首先我们尝试多次执行 make 观察 我们观察到只有在第一次执行 make 的时候程序进行了编译后面都没有进行编译我们再对程序进行多次清理呢我们观察结果 我们可以观察到执行 make clean 的时候每一次都进行了程序的清理这就是应该如何理解总是被执行 因为 clean 是伪目标所以它总是被执行。 2那么为什么不是伪目标就不能总是被执行呢 首先我们理解一下文件的 ACM 时间stat 文件名 可以查看文件的 ACM 时间如下图 其中Access 时间是最近访问这个文件的时间Modify 时间是最近修改这个文件内容的时间Change 是最近修改这个文件属性的时间。 其实Makefile 和 make 通过一个文件的内容修改时间不让我们重新重复编译我们的代码因为我们的文件已经是最新了没有必要再进行编译。 详细的解释如下假设我们有一个源文件 test.c 和一个 Makefile 文件 我们第一次编译的时候一定是先有源文件如上的 test.c这时候还没有编译一定没有我们的目标文件mytest 文件所以一定能编译成功如下 当我们出现了 mytest 文件mytest 文件的修改时间 test.c 文件的修改时间 当我们第 n 次 编译的时候如果我们没有对 test.c 进行修改那么 mytest 文件的修改时间还是大于 test.c 文件的修改时间此时编译不通过如下图 当我们对 test.c 文件进行修改更新了它的修改时间此时 test.c 的修改时间 mytest 的修改时间此时重新编译可以通过如下 3Access 时间的特性 我们有以下现象当我们第一次编译的时候 当我们想单独查看 test.c修改它的 Acess 时间如下 我们发现它的 Access 时间并没有修改这是为什么呢 一般而言一个文件被查看的频率是非常高的我们所看到的文件都在磁盘中存放而文件 内容 属性所以更改文件时间的本质其实是访问磁盘而访问磁盘的效率是很低的所以Linux 为了提高效率更改了 Access 时间访问间隔或者添加了次数限制所以如果我们想立即更新 Access 时间可以直接 touch 文件如下 3. make/Makefile 具有依赖性的推导能力语法扩展 make/Makefile 具有依赖性的推导能力我们在 Makefile 文件中有如下代码其实就是程序的编译过程 编译之后如下 可以看出就是我们编译程序的过程我们执行观察一下 但是并不推荐用这种方法编译因为我们可以直接使用 gcc 直接形成可执行程序。 我们还有其他的语法扩展如下 其中 gcc -o $ $^ 中$ 代表依赖关系中冒号左边的所有文件$^ 代表依赖关系中冒号右边的所有文件我们编译出来后会替换成以下 4. 编写一个进度条代码 1缓冲区 我们看以下的代码 1 #include stdio.h2 #include unistd.h3 4 int main()5 {6 printf(hello, world\n);7 sleep(3); 8 return 0;9 }我们打印了 “hello, world”随后换行执行 sleep(3);是让程序停下来三秒钟再继续往下执行我们观察一下结果 首先执行是这样的 过了三秒钟后 我们观察到程序是过了三秒之后才重新显示出命令行。 我们再观察以下代码 1 #include stdio.h2 #include unistd.h3 4 int main()5 {6 printf(hello, world);7 sleep(3); 8 return 0;9 }上面的代码我们将第一段代码中的 \n 删除了随后我们执行这段代码观察结果 执行后 过了三秒后 我们观察到执行程序后屏幕上并没有打印出 hello, world过了三秒后才打印出来首先程序是从上往下执行的printf 语句肯定是先执行了的但是并没有先打印出来这是为什么呢下面我们引出一个概念- - -缓冲区。 其实上面的现象中在程序执行 printf 后printf 打印的内容被存放到缓冲区中在 C/C 中会针对标准输出给我们提供默认的缓冲区而在缓冲区没有被刷新之前我们的内容就不会被输出。 而 \n 就是一种刷新的策略 - - - 行刷新。所以我们加了 \n 后缓冲区被刷新随即便打印出内容。 而我们没有使用 \n 的时候缓冲区并没有被刷新但是我们可以使用 fflush(stdout) 强制刷新缓冲区从而打印出内容例如 1 #include stdio.h2 #include unistd.h3 4 int main()5 {6 printf(hello, world);7 fflush(stdout); 8 sleep(3); 9 return 0;10 }输出结果 三秒后 我们可以看到缓冲区的内容被强制刷新出来了。 2\n 和 \r 我们首先编写一个简单的倒计数程序例如 1 #include stdio.h2 #include unistd.h3 4 int main()5 {6 int cnt 10;7 while(cnt 0)8 {9 printf(%d\n, cnt);10 cnt--; 11 sleep(1); 12 } 13 14 return 0; 15 } 观察结果 但是这并不是我们想要的倒计时我们是期望在同一行中显示出来所以我们不应该用 \n其实 \n 就是我们所说的回车就是使光标换行并回到那一行的最初位置这时候我们就应该使用 \r\r 就仅仅让光标回到当前行的最初位置我们对上面的代码修改如下 1 #include stdio.h2 #include unistd.h3 4 int main()5 {6 int cnt 10;7 while(cnt 0)8 {9 printf(%d\r, cnt);10 fflush(stdout); 11 cnt--; 12 sleep(1); 13 } 14 15 return 0; 16 } 执行结果如下 从上面的结果可看出我们的倒计时虽然在同一行了但是输出的格式还是有问题因为默认 %d 是按照一个字符的形式打印的我们是要按照两个字符打印所以我们仅需将第9行修改即可如下 9 printf(%2d\r, cnt);结果如下 这时候就基本完成我们的倒计时了但是倒计时到个位数的时候前面空了一个字符不太美观这是因为 %2d 是默认右对齐我们在前面加上负号就是左对齐了所以我们继续修改 9 printf(%-2d\r, cnt);结果如下 到此我们的倒计数就完成了。 3进度条代码 简单版本 首先我们在一个新目录下创建 Makefile 文件和 ProgressBar 头文件函数实现文件和主函数文件如下 我们先编辑 Makefile 文件建立依赖关系和依赖方法 1 ProgressBar:main.c ProgressBar.c2 gcc -o $ $^3 .PHONY:clean4 clean:5 rm -f ProgressBar 随后创建主函数主函数中只要调用我们的进度条函数即可如下 #include ProgressBar.hint main(){ProgressBar_v1();return 0;}然后我们进入函数的声明部分声明需要用到的变量和函数 1 #include stdio.h2 #include unistd.h3 #include string.h4 5 void ProgressBar_v1();6 #define SIZE 101 //数组大小7 #define MAX_RATE 100 //加载进度最大值8 #define STYLE # //加载符号9 #define STIME 1000*40 //时间我们声明好所有变量后进入函数的实现部分 1 #include ProgressBar.h2 const char *str |/-\\; // 加载光标3 4 void ProgressBar_v1()5 {6 // 当前进度7 int rate 0;8 char bar[SIZE];9 memset(bar, \0, sizeof(bar));10 11 // 加载光标的数组长度12 int num strlen(str);13 14 // 当进度没有加载满15 while(rate MAX_RATE)16 {17 printf([%-100s][%d%%][%c]\r, bar, rate, str[rate % num]);18 fflush(stdout);19 usleep(STIME); 20 bar[rate] STYLE; 21 }22 printf(\n); 23 }其中我们在使用延时函数的时候使用了 usleep 函数它与 sleep 相比就是sleep 中以 s 为单位usleep 中以 us 为单位。 下面我们 make 生成可执行程序然后运行观察结果 加载完成后就是上图这样子。这是简单的实现了一个进度条的版本下面我们进一步改进这个进度条。 进阶版本实际应用 在实际应用中我们的进度条一般都应用在下载软件中下面我们就简单以下载一个软件为例简单实现一下这个代码 首先我们实现函数的实现部分 // 不能一次将进度条打印完毕否则无法平滑的和场景结合 // 该函数应该根据rate自动的打一次 void ProgressBar_v2(int rate) { // 设置为静态数组每次进来不会清零 static char bar[SIZE] {0}; // 加载光标的数组长度 int num strlen(str); // 当进度没有加载满 if(rate 0 rate MAX_RATE) { printf([%-100s][%d%%][%c]\r, bar, rate, str[rate % num]);fflush(stdout); bar[rate] STYLE; } } 我们再看声明部分其中我们增加了下载目标的大小和每次的下载速度 1 #include stdio.h2 #include unistd.h3 #include string.h4 5 void ProgressBar_v1();6 void ProgressBar_v2(int);7 #define SIZE 101 //数组大小8 #define MAX_RATE 100 //加载进度最大值9 #define STYLE # //加载符号10 #define STIME 1000*40 //时间11 12 #define TARGET_RATE 1024*1024 //下载目标的大小 1MB13 #define DSIZE 1024*10 //下载速度最后看主函数部分 1 #include ProgressBar.h2 3 void download()4 {5 int target TARGET_RATE;6 int total 0;7 while(total target)8 {9 // 用简单的休眠时间模拟本轮下载花费的时间10 usleep(STIME);11 12 // 每次加上下载速度13 total DSIZE;14 15 // 按百分比传入 v2 函数16 int rate total*100/target;17 ProgressBar_v2(rate);18 } 19 printf(\n);20 }21 22 int main()23 {24 // 下载的软件25 download();26 return 0;27 }这就是简单的一个实际应用的进度条代码其中主函数部分我们还可以使用回调函数进行优化如下 我们先在函数声明处加上函数指针的声明 typedef void (*callback_t)(int); // 函数指针 随后修改主函数部分 1 #include ProgressBar.h2 3 void download(callback_t cb)4 {5 int target TARGET_RATE;6 int total 0;7 while(total target)8 {9 // 用简单的休眠时间模拟本轮下载花费的时间10 usleep(STIME);11 12 // 每次加上下载速度13 total DSIZE;14 15 int rate total*100/target;16 cb(rate); // 回调函数 17 }18 printf(\n);19 }以上的进度条运行结果都如下图所示 二、Linux 版本控制器 - git 所谓的版本控制器简单地说就是将被管理的内容文本或者程序按照变化来进行管理的软件最终达到的目标是我们想要哪一个版本的文本或者程序都可以为我们提供。 我们常用的 gitee / github 都是基于 git软件搭建的网站目的是让版本可视化。 如果我们的 Linux 中没有安装 git可以执行 sudo yum install -y git 进行安装。 1. git clone 我们使用 git 主要是将自己的代码存放到远程仓库中这里我们以 gitee 为远程仓库在Linux中上传自己的代码首先我们要在gitee中创建一个仓库如下 随后我们将仓库的地址复制在Linux中运行以下命令 git clone https://gitee.com/YoungMLet/temp如下 随即需要我们输入邮箱地址以及用户名所以我们下面介绍一下如何配置邮箱地址和用户名。 2. git config 我们可以使用命令 git config 配置我们的邮箱地址和用户名例如我们需要配置用户名 git config --global user.name xxx 如果需要配置邮箱地址可以执行以下命令 git config --global user.email xxxxxxxx.com注意这里的用户名和邮箱地址需要和远程仓库中的用户名和邮箱地址一致。 我们可以使用以下指令查看我们当前的配置信息 git config -l如果我们需要修改我们的邮箱地址和用户名也是有办法的首先我们先需要删除邮箱地址和用户名删除用户名 git config --global --unset user.name删除邮箱地址 git config --global --unset user.email下面我们学习git 三板斧。 3. git add 首先我们先简单认识三个名词工作区、暂存区、版本库。 工作区就是我们写代码的目录暂存区就是我们使用 git add 后代码暂存的区域版本库就是从暂存区提交后即git commit所在的区域。 当我们在工作区需要将我们的代码送到远程仓库时首先先要将我们的代码 git add 到暂存区此时我们需要执行 git add 命令如下图 仅需要执行这一句命令就可以使工作区中的 study5 送到暂存区中此时我们可以使用命令 git status 查看此时仓库的状态如下 说明已经 add 成功此时需要将我们的代码提交到版本库中。 4. git commit 当我们的代码已经在暂存区后我们需要将它提交到版本库中此时就需要执行以下命令 git commmit -m 这里写上日志注意这里必须加上 -m. 假设我们将上面所写的进度条提交到版本库中如下 我们还可以使用 git log 命令查看我们所提交的日志当我们将代码提交到版本库后我们此时还有最后一步就可以将我们的代码上传到远程仓库了。 5. git push 此时我们只需要执行以下命令即可将代码上传到远程仓库中 git push此时需要我们输入用户名和密码我们输入即可 此时就完成我们的代码上传到远程仓库了。 6. git pull 有些情况当我们多人协作写项目的时候我们提交的代码和别人提交的代码可能会导致我们的本地仓库与远程仓库不同步此时需要我们执行 git pull 即可同步。 三、Linux 调试器 - gdb 程序的发布方式有两种debug 模式和 release 模式Linux gcc/g 编译出来的二进制程序默认是 release 模式要使用 gdb 调试必须在源代码生成二进制程序的时候, 加上 -g 选项如下我们在编辑 Makefile 文件时在建立依赖方法时需要给可执行程序加上 -g 选项 此时我们退出 Makefile执行 make然后对 mytest 可执行文件执行 gdb mytest 即可进行调试如下 如上图即进入了 gdb 调试模式退出调试 q 或 quit下面我们开始使用 gdb 进行调试 1. 查看指令 在 gdb 中list简写 l 可以查看源代码其中l number 可以查看从第 number 行代码另外 gdb 会记录最近的历史命令直接回车就是上一个命令所以我们直接回车会接着上次的位置往下列每次列10行。例如查看我们的代码 此时继续按回车 查看我们完整的代码 这就是查看指令。 2. 断点 打断点Breakpoint的指令是b number 或者 b function其中 number 为行号function 为函数名例如我们以上面的代码为例在某一行打断点 此时查看我们的打的断点指令是info b如下 删除断点的指令是d 序号其中序号是查看断点中前面的那个 Num例如我们先多打几个断点 如上每个断点前都有对应的序号假设我们需要删除某一个断点 3. 开始调试 开始调试的指令是run 简写 r如果有断点程序遇到断点就会停下否则程序会直接运行到结束。 在 vs 中我们可以使用 F10 和 F11 进行逐过程和逐语句的调试在gdb 中我们也可以使用这样的操作其中逐过程是 n即 vs 中的 F10逐语句是 s即 vs 中的 F11. 例如我们现在只有一个断点我们使用逐过程和逐语句依次调试 先 run 起来程序会停在 16 行此时我们按下 n 此时我们遇到一个函数按下 s 进行逐语句 此时程序跳到函数的入口处如果我们继续向往下走继续 n 即可假设我们想在调试中查看变量名和变量的地址可以使用 display 指令直接使用 display 变量 即可例如我们当前进入循环体内想要查看当前 ret 的值 如果想查看 ret 的地址 如果想要取消显示某个变量可以使用 undisplay 序号 即可其中序号是 display 前面显示的序号如下 当前就取消了 ret 的显示。 除此之外我们还可以对断点进行开启和关闭如下图在 Enb 这一列中y 表示当前断点是开启的 如果我们想关闭这个断点可以执行指令 disable 序号如下 重新打开这个断点可以执行指令enable 序号 4. 其他指令 当我们进入了一个循环体但是这个循环次数非常多我们想直接跳过这个循环可以使用指令until 行号运行至指定的位置 还可以使用 finish运行到当前函数的结尾 我们还可以进行断点之间的运行从一个断点直接运行到下一个断点对应的指令continue简写c. bt 可以查看堆栈 set var 可以改变变量的值例如 set var i xxx 5. 总结 我们使用的 gdb 指令都是以常见的为主其他的请大家自主学习下面我们总结一下我们的 gdb 指令 查看代码l number打断点b number删断点d 序号查看断点info b开始调试r禁止断点disable 序号开启断点enable 序号逐过程n逐语句s查看变量display 变量取消查看变量undisplay 序号运行至指定的位置until number运行到当前函数的结尾finish从一个断点运行至下一个断点c查看调用堆栈bt更改变量的值set var 需改变量 改的值退出gdbq
http://www.pierceye.com/news/268367/

相关文章:

  • 简历网站推荐做网站公司是干什么的
  • 网站备案率是什么会展相关app和网站的建设情况
  • 南京网站设计网站建设上海网站域名备案处
  • 做网站市场分析三视觉平面设计网
  • 网站建设中++模板企业网站部署计划
  • 房产部门成立网站wordpress站内搜索次数
  • 网站建设合同管辖地广州敏城建设工程有限公司网站
  • 班级网站主页设计模板购买网站域名空间
  • 做响应式网站最大宽度景观设计公司起名
  • 有小广告的网站适合40岁女人的培训班
  • html5网站建设有什么网站用名字做图片
  • 合肥珍岛公司做网站推广怎么样关键词排名优化如何
  • 做讲课ppt的网站郑州市建设局官方网站
  • 邢台集团网站建设报价免费推广网站有哪些
  • 龙华网站建设营销推广广东东莞区号
  • 徐汇网站开发培训企业建网站报价
  • 专业网站建设公司兴田德润信任高建设高端网站公司哪家好
  • 烟台网站建设优惠臻动传媒做网站怎么挣钱
  • 重庆网站建设mlfartwordpress4 中文
  • 永州建设企业网站阿里云 网站部署
  • 学校做网站难吗创新logo设计
  • 国内用python做的网站如何做网站讯息
  • 的网站开发工具有哪些免费制作永久企业网站
  • 网站举报查询一个网站开发的权限
  • 简约网站程序海南网络广播电视台少儿频道
  • 深圳高端品牌网站设计wordpress 树形主题
  • 怎么自己创建一个网站国外企业网络研究
  • 去百度建网站北京企业网站设计公司
  • mysql 收费 网站建设wordpress主题后台不显示
  • 网站cname解析陕西住房建设厅考试官方网站