linux下fork()函数在行缓冲和全缓冲情况下对IO的影响
来源:互联网 发布:手机淘宝如何关注店铺 编辑:程序博客网 时间:2024/05/16 08:16
行缓冲:
当标准IO连接到输出设备的时候,它是行缓冲的(比如输出到终端屏幕等),否则它是全缓冲的.
区别:
行缓冲每输出一行,清空一次缓冲区.
全缓冲在文件结束时,例如fclose()关闭文件时,才清空缓冲区.
不带缓冲的IO对fork()执行期间的影响
标准IO要经过内核的块缓冲区,原始的磁盘IO与其相反.比如read(),write()等.所以不带缓冲的磁盘IO无论在行缓冲还是全缓冲的情况下都不会在子进程缓冲区中存在.
标准IO对fork()执行期间的影响
当父进程通过fork()函数启动一个子进程的时候,会复制父进程的数据空间,堆,栈和副本,这其中也包括了父进程的缓冲区.
行缓冲情况下:
子进程在执行标准io操作的时候会输出父进程复制过来的缓冲区中的内容.由于行缓冲区会被清空,所以不会对子进程的标准IO产生影响.
全缓冲情况下:
子进程产生父进程缓冲区中的副本,再执行标准IO时会先输出父进程缓冲区中复制过来的副本的内容,所以在使用标准IO之前,可以通过清空文件缓冲区的操作,来不影响子进程的标准IO.
下面通过一个APUE中的实例来展示他们之间的区别
include <stdio.h>#include <unistd.h>int glob = 6;char buf[] = "a write to stdout\n";int main(){ int var; pid_t pid; var = 88; if ((write(STDOUT_FILENO, buf, sizeof(buf)-1)) != sizeof(buf)-1) printf("write error\n"); printf("before fork\n"); if ((pid = fork()) < 0) { printf("fork error\n"); } else if (pid == 0) { glob++; var++; } else { sleep(2); } printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var); return 0;}
1.行缓冲
android@startos:~$ ./a.outa write to stdout //不带缓冲的IObefore fork //行缓冲pid = 4067, glob = 7, var = 89pid = 4066, glob = 6, var = 88
2.全缓冲
android@startos:~$ ./a.out > tempfile.outandroid@startos:~$ cat tempfile.outa write to stdout //不带缓冲的IO,只输出了一次before fork //fork()调用之前输出的"before fork"pid = 4087, glob = 7, var = 89before fork //全缓冲时,子进程从父进程缓冲区中复制过来的 "before fork"pid = 4086, glob = 6, var = 88
- linux下fork()函数在行缓冲和全缓冲情况下对IO的影响
- IO缓冲对fork的影响
- linux下的文件缓冲IO
- fork举例和行缓冲全缓冲的理解
- Linux 标准IO库 全缓冲、行缓冲、无缓冲
- linux下的缓冲机制
- 从多进程函数fork解读linux系统行缓冲与全缓冲
- 通过fork函数解读linux系统行缓冲与全缓冲
- 全缓冲和行缓冲的区别
- 全缓冲和行缓冲的区别
- C的全缓冲、行缓冲和无缓冲
- 标准IO缓冲详解 全缓冲 行缓冲 不缓冲
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- 标准IO缓冲详解全缓冲、行缓冲、不缓冲
- 关于Linux下的帧缓冲介绍
- 关于Linux下的帧缓冲介绍
- linux 下不带缓冲IO和带缓冲IO
- JAVAEE 工程师笔试题
- Ext中grid删除行
- android 系统移植
- 线程
- Command rejected: An interface whose trunk encapsulation is "Auto" can not be configured to "trunk"
- linux下fork()函数在行缓冲和全缓冲情况下对IO的影响
- Java基础重温(九)-scjp
- 史上最全VIM编辑器使用总结
- 永久指针
- 内存管理
- 理解Node.js
- 新一轮改革路线图 (zz)
- 12c DDL logging
- 线程的互斥