目录
引言:
之前前所写的vim、gcc/g++、make/makefile分别对应如何编辑一个代码文本、如何编译一个代码文本、如何自动化构建一个代码文本。
接下来用上面的知识写一个liunx小程序---【进度条】。
回车,换行的区分:
换行(\n) —— 新起一行,光标位于行末。
回车(\r) —— 回车是把光标移到开始,即回到当前文本行的首部。
缓冲区:
【sleep】--睡眠 函数:
> Sleep函数可以使计算机程序(进程,任务或线程)进入休眠,使其在一段时间内处于非活动状态。当函数设定的计时器到期,或者接收到信号、程序发生中断都会导致程序继续执行。
- Windows中的sleep()单位是毫秒;Linux中的sleep()单位是秒。
- 其包含在头文件<unistd.h>中,我们通过【man 3 sleep】来进行查看。
想要查询Linux下的sleep()函数的manue手册,使用man 3 sleep却显示在“第 3 节中没有关于 sleep 的手册页条目”如下图所示:
需要转成root账号进行:`yum -y install man-pages`,等待安装成功后,换回普通用户可使用【man 3 sleep】,就可以看到头文件<unistd.h>,按【q】键退出。
【fflush】---刷新流:
fflush(stdin)是清空输入缓存的函数,在输入字符之前调用它可以清除之前未读取的字符。
C语言中一般默认会为我们提供三个流,即【标准输入stdin】、【标准输入stdout】、【标准错误stderror】,一般用来刷新输出流即【stdout】。
代码解释:
#include"processbar.h"
#include<unistd.h>
int main()
{
printf("hello,world\n");
sleep(2);
return 0;
}
结果是怎么样的呢??
可以看到是先执行了【hello,world】之后停顿了2秒后才结束的。
#include"processbar.h"
#include<unistd.h>
int main()
{
printf("hello,world");
sleep(2);
return 0;
}
这种把换行符去掉,结果如何?是先出现【hello,world】再睡2秒?or先睡2秒再【hello,world】???
结果显而易见:根据gif动态图看出是先睡2秒再【hello,world】。真的如此吗???
1. 对于这段代码而言,属于顺序执行,所以一定是从上到下执行下来的,因此一定会先打印printf()语句中的内容。
2. 我们看不到这个内容不代表它不存在,只是它被预存在了缓冲区(就是c语言维护的一段内存)中,因为sleep()函数的缘故,导致这个缓冲区没有被刷新而已,所以它并没有丢失。
接下来看下一段代码及其演示:
#include"processbar.h"
#include<unistd.h>
int main()
{
printf("hello,world");
f