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. 我希望有人向我解释这个.
A的数量不同的原因是线路缓冲.
第一个版本不打印换行,因此在程序退出之前实际上不会写出printf.
由于fork()调用复制了整个运行过程,因此它也复制了A的缓冲行.
然后,当每个进程退出时,刷新其缓冲区以输出.
该程序的第二个版本在每次printf调用时刷新其输出,因为新行以及大多数C实现在新行上刷新缓冲区的事实,如果您要打印到终端.(如果要打印到文件或网络套接字,则不会刷新.)