相信大家在初步学习C/C++的时候都写过“hello world”的代码。在学习了C/C++之后进入Linux系统的学习我们不用再从“hello world”这种入门级程序开始了,毕竟已经有了几年的小经验,但是重新开始在一个新的系统下编写代码,特别是对于Linux中庞杂的指令是需要一个熟悉与练习的过程的。进度条的小程序对于我们熟悉指令,练习VIM下代码的编辑以及gcc和Makefile等工具的使用都是很有帮助的。

VIM之前已经介绍过了,就不做过多赘述,今天利用这个小代码来看看gcc和Makefile是如何运用的。

首先,我们来看看gcc是个什么东西呢?我们已经熟悉了Windows下VS的编译器,同样的,gcc则是Linux下的编译器。我们写好的代码都是通过它来进行预处理、编译、汇编和链接而运行的。gcc是C语言的编译器,g++是C++的编译器,使用方法基本一致。可以通过以下的指令格式完成: 

gcc [选项] 要编译的文件 [选项] [目标文件]。

应用示例:  

gcc –E hello.c –o hello.i  

>>选项“-E”进行查看,该选项的作用是让 gcc 在预处理结束后停止编译过程;选项“-o”是指目标文件,“.i”文件为已经过预处理的 C 原始程序。 

gcc –S hello.i –o hello.s   

>>使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

gcc –c hello.s –o hello.o 

>>汇编阶段是把编译阶段生成的“.s”文件转成目标文件,读者在此可使用选项“- c”就可看到汇编代码已转化为“.o”的二进制目标代码了。

Makefile是一个很重要的东西,是学习Linux必不可少的一个部分。一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。。Makele带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极的提高了软件开发的效率。 make命令执行时,需要一个 Makele 文件,以告诉make命令需要怎么样的去编译和链接程序。Makefile是如何来写的呢?先来看看我在进度条的程序中写的Makefile。

首先要写的是依赖关系,如同第一行所示,第二行便是依赖方法,切记要以Tab键开始。接下来就是以.PHONY开始伪目标文件,也就是说clean是伪目标文件。用make clean可以清楚以前的所有的目标文件,进行重新的编译了。

好了,现在来看看进度条的小程序是如何实现的。我们利用#来进行模拟进度的增长,用/\—|来模拟正在加载的那么圆圈,用百分比表示进度加载的多少。

小贴士:行缓冲——》在这种情况下,当在输入和输出中遇到换行符时,标准I/O库执行I/O操作。这允许我们一次输出一个字符,但只有在写了一行之后才进行实际I/O操作。当流涉及一个终端时,通常使用行缓冲。

用到了两个函数:刷新函数--->fflush(stdout),为了刷新行缓冲区的内容

                          休眠函数--->usleep(10000),睡眠时间,即控制进度的快慢;

运行结果: