Linux fork与printf缓冲问题

printf输出条件:

(1) 调用fflush;

(2) 缓冲区满了;

(3) 遇到\n \r这些字符

(4) 遇到scanf这些要取缓冲区的;

(5) 线程或者进程退出;

 

fork之后会拷贝父进程的缓冲区;

 

实例分析:

 

结果:

 

(1) 第一次输入到控制台,write无缓冲直接输出,printf(“before fork\n”)存在\n行缓冲标识直接输出,而子进程拷贝父进程代码段,随后也会输出最后的printf;

(2) 第二次输入到文件,write无缓冲直接输出,printf(“before fork\n”)成了全缓冲的并没有输出,子进程拷贝了父进程的缓冲区和代码段,所以当父子进程退出时,刷新缓冲区,均有两条printf输出;

本文链接:Linux fork与printf缓冲问题

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注