先看代码:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
pid_t pid;
printf("1\n");
//fflush(stdout);
sleep(5);
pid=fork();
switch (pid) {
case 0:
printf("Child Process is running ,Curpid is %d,ParentPid is %d\n",pid,getppid());
break;
case -1:
perror("Process creation fail");
break;
default:
printf("Parent Process is running ,Curpid is %d,ParentPid is %d\n",pid,getpid());
break;
}
exit(0);
}
刚开始的时候,运行代码,输出两次1:
加上 fflush(stdout)之后:
因为fork之后会复制资源,而printf(“1”)之后并没有立即输出,而是存在了缓冲区,不知道为什么\n并没有起作用,所以用fflush(stdout)强制刷新缓冲区,这样fork的缓冲区就没有printf的缓存,所以就只有输出一个1,就是fork之前的那个1