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

本文探讨了一个C语言程序中fork系统调用与printf函数交互导致的输出现象。具体分析了在两次循环内调用fork创建子进程并输出字符“-”的情况,考虑到了输出缓冲区的影响,最终解释了为什么输出的“-”数量为8个。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    #include <stdio.h>  
    #include <unistd.h>  
       
    int main(void)  
    {  
       inti;  
       for(i=0; i<2; i++){  
          fork();  
          printf("-");  
       }  
       return 0;  
    } 
A. 2        B. 4       C. 6       D. 8

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值