fork()命令

Ale*_*lex 2 c parallel-processing fork

在C中运行以下代码后,有一个问题是关于要打印多少个A:

int i;
for (i=1;i<4;i++){
     fork();
     printf("A");
}
Run Code Online (Sandbox Code Playgroud)

我自己算了14.然而,在运行之后,asnwer竟然是24个.后来我运行了一个修改版本:

 int i;
 for (i=1;i<4;i++){
      fork();
       printf("A\n");
 }
Run Code Online (Sandbox Code Playgroud)

其中印有14个A. 我希望有人向我解释这个.

Zan*_*ynx 6

A的数量不同的原因是线路缓冲.

第一个版本不打印换行,因此在程序退出之前实际上不会写出printf.

由于fork()调用复制了整个运行过程,因此它也复制了A的缓冲行.

然后,当每个进程退出时,刷新其缓冲区以输出.

该程序的第二个版本在每次printf调用时刷新其输出,因为新行以及大多数C实现在新行上刷新缓冲区的事实,如果您要打印到终端.(如果要打印到文件或网络套接字,则不会刷新.)