c/c++语言开发共享为什么fork系统调用奇怪的行为?

int main(void) { printf("abc"); fork(); return 0; } 

此代码的输出是:

 abcabc 

为什么打印两次,即使fork系统调用在printf语句之后?

Ideone链接

    因为stdout是缓冲的,通常是行缓冲的。 在你的程序中,缓冲区只在exit时刷新,或者从main返回时(当fork没有失败时发生“两次”)。

    尝试添加fflush(NULL);fork();之前fork(); (你几乎总是这样做)

    顺便说一句,你应该始终保持fork的结果并处理三种情况 : fork失败,在child中,在parent中。

    所以fork的行为应该如此,但是printf并没有你想象的那种天真的直接副作用:它是缓冲所以真正的输出可能发生在后者。 你也可以通过用sleep(15)替换fork()观察缓冲(输出发生在exit时,或者在main结束时,所以 sleep ,15秒你的程序显然不会输出任何东西)

    您也可以使用strace(1)来了解正在发生的系统调用…

      以上就是c/c++开发分享为什么fork系统调用奇怪的行为?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522272.html

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐