gpt4 book ai didi

c - Linux gcc 中 fork() 的工作

转载 作者:行者123 更新时间:2023-11-30 16:39:16 25 4
gpt4 key购买 nike

fork() creates a new process and the child process starts to execute from the current state of the parent process.

这就是我所知道的fork()在 Linux 中。

因此,相应的代码如下:

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

只需按照上述方式打印一次“Hi”。

但是在使用 gcc 编译的 Linux 中执行上述代码时,它会打印“Hi”两次

有人可以向我解释一下使用fork()实际发生了什么吗?如果我了解 fork() 的工作原理正确吗?

最佳答案

(结合用户@Jack评论中的一些解释)当您将某些内容打印到“标准输出”stdout(通常是计算机监视器,尽管您可以将其重定向到文件)时,它最初会存储在临时缓冲区中。

fork 的两侧都继承了未刷新的缓冲区,因此当 fork 的每一侧都命中 return 语句并结束时,它会被刷新两次。

在 fork 之前,您应该 fflush(stdout); 这将刷新缓冲区,以便子进程不会继承它。

到屏幕的标准输出(与将其重定向到文件时相反)实际上是由行尾缓冲的,因此如果您执行了 printf("Hi\n");你不会遇到这个问题,因为它会刷新缓冲区本身。

关于c - Linux gcc 中 fork() 的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106798/

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