赞
踩
目录
在写程序之前,我们先弄清楚一些问题
上面这段代码,在Linux中运行的结果是先打印hello proc!,然后换行,然后等5s后程序结束,这没什么问题,那如果是下面这段代码呢?
如果你认为是先输出hello proc!再等5s然后程序结束的话,就大错特错了。
真实的情况是,先休眠5s,再打印hello proc!然后程序结束,这就证明了行缓冲区的存在
这是什么意思呢?
Linux的命令行默认是行缓冲的,意思就是当我们程序中printf有输出时,Linux不会一个一个字的去输出内容,而是将这些内容先放进缓冲区里,等一行准备完了再一次性把一行全部输出出来(因为效率),Linux判断这一行有没有完的依据时换行符\n(Windows是\r\n,ios是\r),也就是说你这一行要打印的内容再多,只要没遇到\n(或是没遇到程序终止,或是行缓冲区未满),都不会把缓冲区里的东西拿出来输出。
我们常说的回车和换行,其实不是一个意思
换行:光标换到下一行 \n
回车:光标回到本行行首 \r
所以按正常连起来就是\r\n意思是回车换行
但是在c、cpp等语言里,我们的就用一个\n表示回车换行
以上代码,输出从10~1,每输出一个数换一次行,总计10s程序结束
以上代码,等待9s后什么也没输出然后程序结束,因为\r是光标回到行首,相当于在缓冲区里实现了覆盖。
以上代码,用了fflush(stdout),它的作用是刷新输入缓冲区,将缓冲区中的东西输出到屏幕上,并且设置了域宽为2,所以输出结果为在原地打印10~1
这是该项目下的所有文件,myproc是可执行程序
Makefile
proc.c
proc.h
main.c
效果展示
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。