fork函数调用后缓冲区的刷新

tech2023-12-02  30

以下程序创建一个子进程,打印各自的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()); // sleep(1); } // 子进程 else if(pid == 0) { printf("child process, pid = %d, ppid = %d\n", getpid(), getppid()); } puts("End---------------"); return 0; }

当把打印的结果输出到文件的时候,奇怪的事情发生了。puts(“Begin---------------”);会打印2次。

究其原因,是因为 puts是行缓冲,缓冲区的内容还在,输出到文件是全缓冲,会将缓存区中的内容写到文件。

解决办法

在fork前使用fflush()函数刷新缓冲区。

最新回复(0)