全缓冲和行缓冲的区别

来源:互联网 发布:九次方金融数据 编辑:程序博客网 时间:2024/04/30 08:28

在*nix系统中,缓冲方式存在三种,分别是:

1,全缓冲

2,行缓冲

3,无缓冲

在学习APUE这本书时,程序8-1中,就很好的体现了全缓冲和行缓冲的区别,代码如下:

 

编译成功后,我这里生成的二进制文件默认为a.out

运行:./a.out

可以看到结果如下:

 

运行./a.out > temp.out

结果如下:

分析原因:

在./a.out输出中,标注输出是STDOUT_FILENO,是交互式的终端,所以系统采用的缓冲方式行缓冲,所以在printf函数中,输出后,立即刷新缓冲区,而在./a.out > temp.out命令中,输出流定向到了temp.out文件中,所以采用的输出方式为全缓冲方式,所以会两次输出

a write to stdout

可以将程序中fflush(NULL)加入,则只会输出一次

a write to stdout

因为flush即时刷新了缓冲区。

原创粉丝点击