全缓冲和行缓冲的区别
来源:互联网 发布:metinfo模板 源码 编辑:程序博客网 时间:2024/04/30 13:14
转载地址:http://blog.csdn.net/lxmky/article/details/5457324
在*nix系统中,缓冲方式存在三种,分别是:
1,全缓冲
2,行缓冲
3,无缓冲
在学习APUE这本书时,程序8-1中,就很好的体现了全缓冲和行缓冲的区别,代码如下:
- #include<stdio.h>
- #include<unistd.h>
- int glob=6;
- char buf[]="a write ro stdout/n";
- int main()
- {
- int var;
- pid_t pid;
- printf("a write to stdout/n");
- fflush(NULL);
- if((pid=fork())<0)
- {
- printf("fork error");
- }
- else
- {
- if(pid==0)
- {
- glob++;
- var++;
- }
- else
- {
- sleep(2);
- }
- }
- printf("pid=%d,glob=%d,var=%d/n",getpid(),glob,var);
- exit(0);
- }
编译成功后,我这里生成的二进制文件默认为a.out
运行:./a.out
可以看到结果如下:
- a write to stdout
- pid=6587,glob=7,var=134514042
- pid=6586,glob=6,var=134514041
运行./a.out > temp.out
结果如下:
- a write to stdout
- pid=6591,glob=7,var=134514042
- a write to stdout
- pid=6590,glob=6,var=134514041
分析原因:
在./a.out输出中,标注输出是STDOUT_FILENO,是交互式的终端,所以系统采用的缓冲方式行缓冲,很快被新的一行冲掉,重定向后,标准输出是全缓冲。当调用fork时 a write to stdout这行仍然保存在缓冲中,并随着数据段复制到子进程缓冲中,这样,这一行就分别进入父子进程的输出缓冲中,
0 0
- 全缓冲和行缓冲的区别
- 全缓冲和行缓冲的区别
- C的全缓冲、行缓冲和无缓冲
- 全缓冲和行缓冲
- fork举例和行缓冲全缓冲的理解
- 行缓冲、全缓冲、无缓冲
- 全缓冲与行缓冲
- 基于流的I/O提供以下3种缓冲:全缓冲、行缓冲、无缓冲
- 标准的I/O缓冲:全缓冲,行缓冲,无缓冲
- 标准IO缓冲详解 全缓冲 行缓冲 不缓冲
- 标准I/O缓冲:全缓冲、行缓冲、无缓冲
- 标准I/O缓冲:全缓冲、行缓冲、无缓冲
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- 标准I/O缓冲:全缓冲、行缓冲、无缓冲 .
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- 标准I/O缓冲:全缓冲、行缓冲、无缓冲
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- C标准I/O缓冲区:全缓冲和行缓冲
- SOCKET 模拟 HTTPS客服端
- 大多数人不行动
- java nio为什么是通道(三):文件通道
- 深入解析enum
- 课程设计
- 全缓冲和行缓冲的区别
- IOS 自定义复选框
- RHEL环境搭建--Nginx|Tomcat|Java|Dubbo|RabbitMQ|Redis|Nexus|MySQL
- 《软件设计模式读后总结》
- Servlet生命周期
- PHP rawurlencode与urlencode函数的深入分析
- signal(SIGPIPE, SIG_IGN)
- PDNS-Recursor源码分析之dns server的选择原理
- java语言 ant.jar zip打包 utils工具类 通用性强