Linux下实现进度条

1.进度条在生活中很常见,在linux系统中实现一个进度条的程序,感觉还是很有趣的

2.首先,进度条的动态是利用人们的视觉效果产生的,其实并不是像我们看到的那样,每次给后增加一个进度条,而是一个覆盖输出的过程;

先输出:[=                                               ]表示进度是1%,刷新之后

再输出:[==                                             ]......

由于刷新的速度很快,所以在人眼看来是不断地向后递增的过程!

3.实现之前我们先来了解一些知识:

(1)缓冲区

  缓冲区分为无缓冲、行缓冲、全缓冲。

  无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr。

  行缓冲:表示的是输入输出遇到换行才执行真正的I/O操作。典型的代表是键盘的操作。

  全缓冲:表示的是输入输出写满缓冲区才执行I/O操作。典型的代表是磁盘的读写。

(2)回车换行

  回车用'\r'表示,表示的是回到这行的起始位置。

       换行用‘\n’表示,表示的是换行到下一行。

       所以我们一定要清楚linux下的回车换行不是一个符号实现的;而是要用两符号‘\r’和'\n'联合实现的;

  在C语言中,刷新缓冲区的函数是fflush函数,强制刷新缓冲区。实现这个进度条应使用的是无缓冲,实时的将进度条的变化显现出来。

       在这里,不需要换行‘\n’,只需要回车'\r',每次将光标返回到原始位置。

4.代码

fflush()清空缓存区,c语言言的缓存区是以行的形式进行储存的读取,所以在没有遇到\n之前,缓存区不会将数据送到显示器上打印出来;所以需要强制刷新缓冲区,实时的将进度条变化显示出来;'\r'是直接回退到首部,不断覆盖;

5.写Makefile

(1)编译过程:
①预处理:(宏替换,去注释,头文件展开,条件编译)------>干净代码-------> 产生test.i 文件   -E 
②编译:(c语言代码变为汇编语言)------->产生汇编语言 ---------->产生test.s文件    -S 
③汇编:

将汇编语言----->生成机器可识别代码(二进制机器语言),此时二进制不能执行 ------>产生 test.o(中间目标文件)    -c 

(cup记住了二进制语言,认知二进制,cpu里面有自己的二进制指令集)

④链接:链接引入第三方库(如c语言库)和全局变量,才可执行程序 -------->产生file (可执行程序文件)    -o
    
     

    ※链接分为:静态链接(调用自己的方法,不需要去库中调用) ;
                        动态链接(程序主动调用库,库是公有的);
      
    动态链接:不需要拷贝库函数,自身程序比较简单;体积小;但是可移植性差;需要调用库函数,实现起来麻烦;
    静态链接:需要拷贝库函数给自身,自身携带任何方法,体积大,可移植性强;
    gcc编译程序默认是动态链接;生成的可执行文件小;

(2)Makefile第一种写法(直接由源文件proc.c------>可执行程序test,省略中间的预处理,编译,汇编,链接的过程)

(3)makefile第二种写法

(4)make--->生成可执行程序test

(5)./test----->运行可执行程序

(6)make clean----->删除test,为重新执行其他代码清理

(见上图)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值