gpt4 book ai didi

c - fork() 如何处理像 stdout 这样的缓冲流?

转载 作者:IT王子 更新时间:2023-10-29 00:58:00 24 4
gpt4 key购买 nike

<分区>

请看下面的代码。

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

int main(void)
{

fork();
printf(".");
fflush(stdout);
fork();
printf(",");

return 0;
}

输出是:

..,,,,

这对我来说没问题,

但是如果我从上面的程序中删除 fflush(stdout) 那么输出应该是(根据我的理解)。

  ...,.,.,.,

fork()的语句是:将fork()之后的语句同时复制到parent和child中。

我的理解是: 在第一个 fork() 之后,我们有两个进程(假设它是进程 p 和进程 c)

进程p和c中的代码是:

    printf(".");
fork();
printf(",");

现在,假设执行了进程p和c的第一条语句,那么输出将是。

  ..

现在 fork() 语句开始执行。所以,在执行 fork() 之后,我们的进程就像 p , pc ,c ,cc.

p、pc、c、cc中的代码分别是

    printf(",");

我们不刷新 stdout 所以 printf(".") 仍然存在于每个缓冲区中。

所以每个进程都会打印.,所以输出是

 .,.,.,.,

我的问题是: 1) 以前的 .. 在哪里? 也就是说,根据我的解释,输出应该是

                ...,.,.,.,

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com