今天看到一个有趣的程序:
#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!
。