【问题标题】:Why does this code print two times? [duplicate]为什么这段代码打印两次? [复制]
【发布时间】:2012-03-23 19:38:42
【问题描述】:

可能重复:
Working of fork() in linux gcc

#include <stdio.h>

void main ()
{
  printf ("ciao");
  fork ();
}

我对 C 优化有一些想法,但我不确定。希望你知道答案。

【问题讨论】:

  • 我不太确定我是否理解这个问题。它打印的内容非常明显。另外,main 应该返回一个 int,而函数 fork() 的作用还不清楚:)
  • 是的,它打印“ciaociao”。我的问题是为什么它会打印这个。
  • 我想我会修改问题的标题
  • 对不起,我没找到 :(
  • 代码调用UB——1:void main(); 2fork() 没有原型;

标签: c fork newline printf stdio


【解决方案1】:

代码可能会打印两次"ciao",因为标准输出是缓冲 IO,因此标准输出的内部缓冲区将在子进程中复制,并且当每个进程(父进程和子进程)退出时都会刷新两个缓冲区。

与优化无关。

【讨论】:

    【解决方案2】:

    当 fork() 被调用时,父进程和子进程都会继承它,因此它们都会

    当他们刷新缓冲区时打印出“ciao”。如果你调用 fflush(stdout);

    在调用 fork 之前它只会打印一次

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 2017-05-08
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      相关资源
      最近更新 更多