洛阳网站建设优惠公司,网站查询ip地址,wordpress 做小程序,软件开发下载文章目录 1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区 2.linux小程序的实现2.1 回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果 1.文件缓冲区
1.1介绍 为缓和 CPU 与 I/O 设备之间速度不匹配#xff0c;文件缓冲区用以… 文章目录 1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区 2.linux小程序的实现2.1 回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果 1.文件缓冲区
1.1介绍 为缓和 CPU 与 I/O 设备之间速度不匹配文件缓冲区用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。 1.2缓冲文件系统
系统自动地在内存为程序中每一个正在使用的文件开辟一块文件缓冲区。
从内存向磁盘输出数据先送到内存中的缓冲区缓冲区装满后一起输送到磁盘上。从磁盘向计算机读入数据从磁盘文件中读取数据输入到内存缓冲区充满缓冲区从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定。
1.3冲刷函数fflush
int fflush( FILE *stream );
将缓冲区内数据写到stream 指定文件。
成功返回 0
错误返回 EOF
高版本vs无法使用
fclose关闭文件时也会刷新缓冲区#include stdio.h
#include windows.h
int main()
{FILE* pf fopen(test7.txt, w);if (!pf){perror(fopen);return 1;}fputs(abcdef, pf); //数据输出到buffer//此时文件中无内容Sleep(10000); //睡眠10sfflush(pf); //刷新缓冲区Sleep(10000); //睡眠10s//此时数据到达文件fclose(pf);pf NULL;return 0;
}1.4认识linux下的缓冲区 在linux下gcc编译这两段代码时 结果是不同的 左边先输出后睡眠 右边先睡眠后输出 c语言不是从上到下一行一行执行的吗? 确实是的 实际上printf先于sleep执行但是sleep执行完后这个程序才结束 才会输出信息 为什么执行流到printf时 不直接显示以及为什么左边加了换行就能先显示? c语言存在输出缓冲区(一段内存空间) 显示器设备一般的刷新策略是行刷新 即碰到\n就把\n之前的所有的字符显示出来 所以左边代码先显示 后边代码存入到缓冲区 直到程序结束才显示 当一个程序执行会自动打开stdin srdout stderr三个标准IO流 如何在没有换行符的情况下让他执行到printf时就显示? #include stdio.h
#includeunistd.h
int main()
{printf(hello linux!);fflush(stdout);sleep(3);return 0
}2.linux小程序的实现 2.1 回车\r和换行\n 老式键盘的Enter: 实际上是 换行回车[C语言中的\n也是] #include stdio.h
#includeunistd.h
int main()
{int count 5;while(count){printf(count是: %d\n,count);count--;sleep(1);return 0;}
}可以正常输出
#include stdio.h
#includeunistd.h
int main()
{int count 5;while(count){printf(count是: %d\r,count);count--;sleep(1);return 0;}
}不输出任何内容
2.2倒计时程序
#include stdio.h
#includeunistd.h
int main()
{int count 5;while(count){printf(count是: %d\r,count);fflush(stdout);count--;sleep(1);return 0;}
}每执行一次printf 将要输出的信息输出到缓冲区 当执行fflush函数时 将信息从缓冲区刷到显示器 之后\r回车 光标回到行首 count–
2.3进度条小程序
sleep/usleep 代码 运行结果 linu-vim-c-bar