博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux学习入门--I/O标准库二
阅读量:5871 次
发布时间:2019-06-19

本文共 1031 字,大约阅读时间需要 3 分钟。

  hot3.png

《精通Linux C编程》第4.7章流缓冲中提到缓冲区自动刷新的情况:

105911_WpyP_3783667.png

但是在流被关闭时,并没有执行刷新,见测试代码:

#include 
int main(void){ FILE *fp = NULL; FILE *fp1 = NULL; char buf[100] = {0}; fp = fopen("./test.txt","w"); //打开一个文件,并写入两行数据 if(fp == NULL) { perror("fopen"); } fprintf(fp,"1.hello c!\n"); fprintf(fp,"2.hello world!\n"); /* 手动刷新 fflush(fp); */ close(fp); //调用close关闭流 if((fp1 = fopen("./test.txt","r+")) == NULL) //重新打开文件 { perror("fopen"); } if(fgets(buf,100,fp1) == NULL) //读取一行数据 { if(feof(fp1)) { printf("End of file\n"); } else { printf("read failed\n"); } } puts(buf); //输出此行数据 //fflush(fp1); fprintf(fp1,"3.new line data!\n"); //再写入一行数据 //fputs("3.new line data!",fp); fgets(buf,10,fp1); //再读一行数据 puts(buf); //fflush(fp1); close(fp1); return 0;}

执行结果:

110500_Cyoa_3783667.png

原因是写入的两行数据未及时缓冲到文件中,导致fgets读取不到数据,修改后的代码 在写入两行数据后,手动调用fflush函数,运行结果如下:

111038_b5qt_3783667.png

转载于:https://my.oschina.net/xiangxyq/blog/1631510

你可能感兴趣的文章
CCFollow和ActionCallFunc
查看>>
使用复制存储过程执行解决“事务复制中的表大量更新导致无法及时同步”的问题 (转)...
查看>>
飘逸的python - 简明gzip模块压缩教程
查看>>
POJ 1037 DP
查看>>
2013 Multi-University Training Contest 4
查看>>
Android中动态更新ListView(转)
查看>>
hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
查看>>
链表的基本操作
查看>>
第二代支付系统商业银行行内接入系统总体设计(初稿)
查看>>
大型网站系统架构分析
查看>>
一个worker thread服务一个客户端
查看>>
Android中AppWidget的分析与应用:AppWidgetProvider .
查看>>
【转载】徐国洪:好耶向移动广告技术产品转型
查看>>
g++优化选项
查看>>
编辑WCF配置不出现
查看>>
chrome 版本 29.0.1547.76 m 解决打开新标签页后的恶心页面的问题
查看>>
leetcode -- Clone Graph
查看>>
Microsoft Jet 数据库引擎打不开文件,它已经被别的用户以独占方式打开,或没有查看数据的权限。...
查看>>
javascript本地,宿主,内置对象
查看>>
zookeeper系列之通信模型(转)
查看>>