我有一个包含fork()调用的C程序。
#include <stdio.h>
#include <unistd.h>
main ( )
{
fork () ;
printf ( "\nHello" ) ;
fork () ;
printf ( "\nWorld" ) ;
}
这是我在gcc上得到的输出:
Hello Hello World World World World
这应该是:
Hello Hello World World Hello Hello World World
由于以下原因:
Line1: First fork creates a child process.
1.2: Prints 'Hello'
1.3:Creates a child process because of 2nd fork in it.
1.3.2:Prints 'Hello' and 'World'.
1.4:Prints 'World'.
Line2: Prints 'Hello'.
Line3: Second fork() creates child process
3.1:creates a child process
3.2: Prints 'Hello'
3.4: Prints 'World'
Line 4: Prints 'World'
这是我认为该程序的运作方式。请问您能否解释我哪里出错了?这就是为什么我想要了解函数如何运作的原因。
注意:我查看了手册,但我不太理解其中的大部分内容。
此外,数字表示main函数中的行号。例如,1.2对应于由main()函数的第一行fork()调用创建的子进程的第二行。
我无法弄清楚它是如何产生特定输出的。所以我希望了解fork()在简单步骤中发生了什么?
printf
后面添加fflush(stdout)
,否则由于 C 库缓冲,输出可能变得更加复杂难懂。 - Matteo Italia