以下程序创建一个子进程,打印各自的pid和ppid号, puts(“Begin---------------”);只会打印1次。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
int main(int argc
, const char* argv
[])
{
pid_t pid
= fork();
puts("Begin---------------");
if(pid
> 0)
{
printf("parent process, pid = %d, ppid = %d\n", getpid(), getppid());
}
else if(pid
== 0)
{
printf("child process, pid = %d, ppid = %d\n", getpid(), getppid());
}
puts("End---------------");
return 0;
}
当把打印的结果输出到文件的时候,奇怪的事情发生了。puts(“Begin---------------”);会打印2次。
究其原因,是因为 puts是行缓冲,缓冲区的内容还在,输出到文件是全缓冲,会将缓存区中的内容写到文件。
解决办法
在fork前使用fflush()函数刷新缓冲区。
转载请注明原文地址:https://tech.qufami.com/read-14087.html