<分区>
根据我对fork()
的理解,这应该打印“Hello, World!”一次,因为在调用 fork
之前只有一个进程。但是,它会打印两次。奇怪的是,如果我向字符串添加 \n
或使用 puts()
而不是 printf()
,它只会打印一次。
#include<unistd.h>
#include<stdio.h>
int main() {
printf("Hello, World!");
fork();
}
<分区>
根据我对fork()
的理解,这应该打印“Hello, World!”一次,因为在调用 fork
之前只有一个进程。但是,它会打印两次。奇怪的是,如果我向字符串添加 \n
或使用 puts()
而不是 printf()
,它只会打印一次。
#include<unistd.h>
#include<stdio.h>
int main() {
printf("Hello, World!");
fork();
}
最佳答案
缓冲。
由于默认情况下系统上的标准输出是缓冲的,因此不会立即打印。然而,缓冲区将在进程退出之前被刷新。
由于 fork
复制了父级的整个内存空间、文件描述符状态等,它还会复制需要打印的缓冲数据。
因此,除非您在 fork 之前显式刷新标准输出缓冲区(通过将 \n
附加到输出或调用 fflush(stdout);
),否则两个进程都会有缓冲输出打印。
关于c - 为什么这个带 fork 的程序会打印两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690197/