C语言中I/O流的一些疑惑
来源:互联网 发布:中世纪2优化 战报 编辑:程序博客网 时间:2024/05/20 18:48
关于I/O流,初学会碰到一些很奇怪的现象。程序如下:
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}
在终端下屏幕只是输出的只有hello-err,而不输出hello-out,非常让人疑惑
把程序稍微改一下:
int main(){while(1){fprintf(stdout,"hello-out");fflush(stdout);fprintf(stderr,"hello-err");sleep(1);}return 0;}
这次终端屏幕可以输出hello-out和hello-err,ffplush能立即把输出缓冲区的数据进行物理写入,能保证信息实时地打印出来,而
stderr是无缓冲的输出,保证错误提示和输出能够及时反馈给用户,供用户排除错误。在第一个程序中,hello-out写在缓冲区,一直
写到缓冲区满了屏幕才会输出hello-out,而且会输出很多个。
再把程序改一下:int main(){while(1){fprintf(stdout,"hello-out/n");fprintf(stderr,"hello-err/n");sleep(1);}return 0;}
程序也可以输出hello-out和hello-err,这说明标准输出是行缓冲,遇到”/n”,就会进行I/O操作,这样也能及时地输出信息。既然说到了fflush,那就再啰嗦一下,我们常见的调试策略是把一些printf函数散布于程序中,确定错误出现的具体位置。但是,这些函数调用的输出结果被写到缓冲区中,并不立即显示在屏幕上。解决方法是priintf函数之后紧跟fflush函数printf("somgthing is wrong?");fflusn(stdout);
参考资料:
1.《C和指针》 P299
2.http://hi.baidu.com/hp_roc/blog/item/47eedcef85e2b7dfb31cb19e.html
- C语言中I/O流的一些疑惑
- 关于单链表C语言实现的一些疑惑
- C语言学习大纲--I/O流
- java语言的一些疑惑
- C语言标准I/O
- I/O 流的一些自我总结
- C语言中关于return 语句使用的疑惑
- c语言中i++,++i的计算
- c语言的I/O重定向的能力
- c++I/O流
- C语言与C++文件的I/O操作
- 2017.1.11--linux下的C语言--文件I/O
- C语言底层的I/O输入输出总结
- Python 中File I/O 和一些常用的方法
- C/C++文件的一些疑惑
- 看c primer 的一些疑惑
- c++中一些处理i/o流和文件流信息的方法总结
- Java中I/O流的选择
- bdb及其在php下扩展的安装 & bdb性能测试
- 可怜的阿桑奇
- 栈头文件C语言
- 栈实现文件C语言
- 百万级访问网站前期的技术准备
- C语言中I/O流的一些疑惑
- 我想写个bbs,都需要些什么模块呀?大家给点建议!
- linux下tar gz bz2 tgz z等众多压缩文件的解压方法
- DoDataExchange函数
- 拓扑排序C语言
- Google图书馆现在开幕
- linux步进电机驱动
- 编程论坛发布一套c语言教程,共十章,供大家学习
- 嵌入式Linux驱动——s3c2410的ds18b20(基于linux-2.6.24.4内核)