一张图解决一道笔试题 --- 理解fork函数

来源:互联网 发布:手机淘宝自定义模块 编辑:程序博客网 时间:2024/05/20 08:25

下面的程序一共输出多少个“-”?()

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>    
  2. #include <unistd.h>    
  3.      
  4. int main(void)    
  5. {    
  6.    inti;    
  7.    for(i=0; i<2; i++){    
  8.       fork();    
  9.       printf("-");    
  10.    }    
  11.    return 0;    
  12. }   
A. 2        B. 4       C. 6       D. 8 

由于printf没有清理缓冲区,所以图中有些地方有相应的+1,+2,就是子进程对父进程拷贝的同时,子进程的输出缓冲区也做了同样拷贝,父进程维持自身不变(注意父子进程角色的变化),从图中很容易得出,本题目在 i < 2 时,输出是8个“-”,题目修改,比如 i < 3,那么输出将会是24个“-”。

如果printf有清理缓冲区,那么相应的输出就没有图中对应的print+了。

0 0
原创粉丝点击