printf输出条件:

(1) 调用fflush;

(2) 缓冲区满了;

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

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

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

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

代码:

 #include <unistd.h>
#include <stdio.h> int glob = ;
char buf[ ] = "a write to stdout\n"; int main()
{
int var;
pid_t pid; var = ; if (write(STDOUT_FILENO, buf, sizeof(buf) - ) != sizeof(buf) - ){
perror("write error\n");
return -;
} printf("before fork\n"); if ((pid = fork()) < ){
perror("fork error\n");
return -;
} else if (pid == ){
glob++;
var++;
} else {
sleep ();
} printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var); return ;
}

结果:

[root@AY1404041716143649d3Z forkPrintf]# gcc forkPrintf.c -o forkPrintf
[root@AY1404041716143649d3Z forkPrintf]# ./forkPrintf
a write to stdout
before fork
pid = , glob = , var =
pid = , glob = , var =
[root@AY1404041716143649d3Z forkPrintf]# ./forkPrintf > tmp.out
[root@AY1404041716143649d3Z forkPrintf]# cat tmp.out
a write to stdout
before fork
pid = , glob = , var =
before fork
pid = , glob = , var =

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

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

最新文章

  1. SQL Server 2012 新特性:其他
  2. CSS3 外发光 渐变色
  3. hdu N皇后问题
  4. ADF_Desktop Integration系列2_ADF桌面集成入门之开发简单ADF Desktop Excel
  5. struts2中valueStack,stackContext以及actionContext的关系
  6. Atitit.软件的仪表板(8)--os子系统--监控资源使用情况
  7. [Django]bulk_create 探究
  8. laravel migrate时报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
  9. 机器学习算法总结(九)——降维(SVD, PCA)
  10. 关于AOP的PIAB
  11. Here’s just a fraction of what you can do with linear algebra
  12. Educational Codeforces Round 47 (Rated for Div. 2)F. Dominant Indices 线段树合并
  13. &amp; 运算
  14. centos killall安装
  15. maven仓库配置
  16. dede_CMS模板的基础安装
  17. Oracle 10g RAC 如何配置 VIP IPMP
  18. Infinity 与 NAN
  19. Python3中开发目录的引用
  20. 九. 常用类库、向量与哈希3.Java语言包(java.lang)简介

热门文章

  1. Spring MVC 之@Controller@RequestMapping详解
  2. f-measure[转]
  3. datepicker约束开始时间和结束时间
  4. 用select模拟一个socket server成型版2
  5. ubuntu安装记录——安装作业部落cmd markdown
  6. BZOJ2752:[HAOI2012]高速公路——题解
  7. 洛谷4577 &amp; LOJ2521:[FJOI2018]领导集团问题——题解
  8. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
  9. lighttpd - 配置
  10. [IOI2007]Miners 矿工配餐