C fork程序说明

jac*_*son 3 c fork stdio

我有一个代码如下

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    printf("a\n");
    fork();

    printf("b\n");
    if(fork() == 0) {
        printf("c\n");
        exit(0);    
    }
    printf("d\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

a
b
d
a
b
c
a
b
d
a
b
c
Run Code Online (Sandbox Code Playgroud)

我不知道为什么输出重复多次.

眠りネ*_*ネロク 8

我不知道为什么输出重复多次

因为printf()是缓冲的.

进程调用时fork(),生成的子进程将获取父进程缓冲区的副本.

您可以fflush(stdout)在每次调用之前放置此输出缓冲区fork().在这种情况下,输出应该是:

a
b
b
d
c
d
c
Run Code Online (Sandbox Code Playgroud)

请注意,如果输出引用到终端,则默认情况下它将是行缓冲的,即:每次将a缓冲区\n发送到输出时都会转储缓冲区.如果要将输出重定向到文件,则不是这样.