将输出多少hello?是16号吗



这会生成hello的16个副本吗?如果没有,有多少?

#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("hellon");
fork();
fork();
fork();
fork();
return(0);
}

这取决于是否将输出发送到文件或通过管道将其发送到程序(如cat(或wc -l((,或者是否将其留给写入终端。如果它到达终端,你应该只打印一行;如果它进入管道或文件,你会得到16。

另见fork()之后的printf()异常。

不同之处在于,当输出到达终端时,它是行缓冲的;当它进入"非交互式设备"(文件、管道(时,它被完全缓冲。

  • 当输出为行缓冲时,格式中的换行符会强制输出在执行任何fork()调用之前出现。没有任何可供打印的进程。

  • 当输出被完全缓冲时,printf()不会强制将缓冲的数据输出。从4个连续的fork()调用创建的16个进程中,每个进程都有一个相同缓冲区的副本,等待刷新。当进程退出时,这些缓冲区会被刷新,因此会出现输出的16个副本。

有关标准规范,请参见C11§7.21.3文件¶3和¶7。

因为fork();是在print语句之后调用的。只有一份《你好》。输出为:

你好

最新更新