结合Unix中的缓冲理解fork

今天看到一个有趣的程序:

#include <unistd.h>;  
#include <sys/types.h>;  

main ()  
{  
        pid_t pid;  
        printf("fork!");    // printf("fork!/n"); 
        pid=fork();  

        if (pid < 0)  
                printf("error in fork!");  
        else if (pid == 0)  
                printf("i am the child process, my process id is %d/n",getpid());  
        else  
                printf("i am the parent process, my process id is %d/n",getpid());  
}

这里是原文地址
如果printf中没有换行,那么输出是:

fork!i am the child process, my process id is 4286  
fork!i am the parent process, my process id is 4285 

而如果printf中有换行,输出是:

fork!  
i am the child process, my process id is 4286  
i am the parent process, my process id is 4285 

没有换行的话,printf中的字符串是保存在缓冲区里的,而且这里一个fork字符串也不至于塞满缓冲区,所以子进程拷贝父进程的数据时,把缓冲区的数据也拷贝进去了,所以会输出两个fork!。而如果换行的话,就会导致直接输出,不会存储在缓冲区里,所以子进程也就没有把父进程的缓冲区给拷贝进来,所以也就只能输出1个fork!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值