使用printf在c中fork()[重复]
Posted
技术标签:
【中文标题】使用printf在c中fork()[重复]【英文标题】:fork() in c using printf [duplicate] 【发布时间】:2013-07-01 12:48:39 【问题描述】:有 2 个不同的程序,例如它们很小:
int main()
printf ("print hello");
fork();
int main()
printf ("print hello\n");
fork();
输出 1 是:`print helloprint hello
输出2是:print hello
问题是,为什么带有\n
的那个只打印一次,而第一个打印两次呢?
【问题讨论】:
【参考方案1】:您遇到了系统printf
实现的缓冲行为。在第一种情况下,字符串被打印到缓冲区中,但由于没有换行符(而且您没有调用fflush
),它只是坐在那个缓冲区中。然后你分叉,当各自的进程退出时,两个分叉的缓冲区都会被刷新。
在第二种情况下,\n
导致缓冲区在分叉之前被刷新,因此当分叉进程退出时没有剩余输出。
【讨论】:
谢谢!现在就明白了。【参考方案2】:变化:
printf ("print hello");
fork();
到
printf ("print hello");
fflush(stdout);
fork();
默认情况下,stdout
通常是行缓冲的。在您的示例 2) 中,您可以保证 stdout
在 fork
之前刷新,但在示例 1) 中,它可能发生在 fork
之后。在fork
之前刷新stdout
保证您在fork
之前打印字符串。
【讨论】:
这真的没有回答“为什么”以上是关于使用printf在c中fork()[重复]的主要内容,如果未能解决你的问题,请参考以下文章