标准IO缓冲
2010-10-12 17:30
363 查看
一、问题描述:
终端无输出结果。
二、分析问题
1. 标准输出(stdout)是行缓冲模式。其何时会输出在于:printf里有'/n',fflush(stdout)或setbuf(stdout, NULL),缓冲区已满三种。在应用程序退出时(exit()),会ffush缓冲区。
2. 上述程序,如果将sleep(1) ->usleep(1000)会有输出,原因在于printf的缓冲区已满所以才会输出。
三、结论
由于sleep(1)等待时间稍长,printf缓冲区没有填满,所以终端没有输出。
另:可以通过如下程序测试printf的缓冲区大小:
当输出第一组数据时,立刻ctrl+c终止,拷贝数据到buf.txt文件,查看文件可知printf缓冲区大小。
参考资料:
《APUE》5.4节——缓冲
《关于 printf 和 缓冲区》http://hi.baidu.com/glasswm/blog/item/52b5dbc4ff06aec738db49a0.html
《关于流和缓冲区的理解以及一般标准输入问题的解决方法小结》http://bbs.chinaunix.net/viewthread.php?tid=588099
int main() { int i = 1; while(1) { printf("%d", i); sleep(1); i++; } }
终端无输出结果。
二、分析问题
1. 标准输出(stdout)是行缓冲模式。其何时会输出在于:printf里有'/n',fflush(stdout)或setbuf(stdout, NULL),缓冲区已满三种。在应用程序退出时(exit()),会ffush缓冲区。
2. 上述程序,如果将sleep(1) ->usleep(1000)会有输出,原因在于printf的缓冲区已满所以才会输出。
三、结论
由于sleep(1)等待时间稍长,printf缓冲区没有填满,所以终端没有输出。
另:可以通过如下程序测试printf的缓冲区大小:
int main() { int i = 1; while(1) { printf("%d", i); usleep(10000); i++; } }
当输出第一组数据时,立刻ctrl+c终止,拷贝数据到buf.txt文件,查看文件可知printf缓冲区大小。
参考资料:
《APUE》5.4节——缓冲
《关于 printf 和 缓冲区》http://hi.baidu.com/glasswm/blog/item/52b5dbc4ff06aec738db49a0.html
《关于流和缓冲区的理解以及一般标准输入问题的解决方法小结》http://bbs.chinaunix.net/viewthread.php?tid=588099
相关文章推荐
- IO特性(2) Unix标准IO缓冲(buffering)
- 第十三篇:带缓冲的IO( 标准IO库 )
- 标准IO与linux系统IO的缓冲问题
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- 《UNIX环境高级编程》笔记--标准IO缓冲
- 标准IO缓冲
- 8 标准IO之fflush,无缓冲,fseek,rewind
- linux 标准IO缓冲机制探究
- UNIX里面关于标准IO的几种缓冲机制
- 标准IO缓冲详解 全缓冲 行缓冲 不缓冲
- 标准IO重定向到文件非交互式设备时的缓冲策略
- 不带缓冲的IO的标准输入到标准输出
- linux 标准IO缓冲机制探究
- 标准IO的缓冲问题
- linux 标准IO缓冲机制探究
- linux 标准IO缓冲机制探究
- 带缓冲的IO( 标准IO库 )
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- linux 标准IO缓冲机制探究
- 文件IO 打开一个文件,用write标准输出到屏幕