gpt4 book ai didi

c++ - 为什么放置\n会改变执行顺序

转载 作者:太空宇宙 更新时间:2023-11-04 05:37:37 25 4
gpt4 key购买 nike

当我尝试在 c 中编写僵尸进程模拟代码时,由于在 printf 语句中放置\n,我的输出发生了变化:

代码1:

main()
{
int id;
id=fork();

if(id>0)
{
printf("Parent will sleep");//pf1//
sleep(5);
//system("ps -u");
}
if(id==0)
printf("I am child");//pf2//
}

输出:

I am childParent will sleep

但是当将\n 放入 pf1 或 pf2 时,语句的执行顺序发生了变化。\n 改变顺序背后的原因是什么?

最佳答案

stdout行缓冲

当您printf 将某些内容输出到标准输出时,库会缓冲此内容,直到观察到换行符为止。届时,缓冲区将被刷新,并最终显示在您的控制台上。如果不打印换行符,数据可能会无限期地保留在缓冲区中,直到下次打印换行符或进程退出时才会看到它。

要确保您的打印件始终立即可见,您可以执行以下操作之一:

  • fprintf(stderr, ...) 代替。 stderr 没有缓冲;写入其中的数据将立即可见。
  • fflush(stdout) - 手动强制立即刷新流。

更新:请注意,由于涉及固有的竞争条件,这些实际上都不重要。你无法控制是父进程还是子进程先执行,哪个数据先写入控制台。您甚至可能会看到交错的输出,因为它们都试图同时打印。 (感谢 jschultz410 指出我的愚蠢。)

关于c++ - 为什么放置\n会改变执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com