What will be the output of the following code:
#include <stdio.h>
void main()
{
int i;
for (i=0;i<2;i )
{
fork();
printf("1\n");
}
printf("2\n");
}
On the lectures, the professor ran the code and the output had six 1s and four 2s, but I don't understand how we obtained those numbers.
CodePudding user response:
Lets "draw" the processes in a tree form, and mark out where the printf
call are happening, and then count the printf
calls of each type:
parent | fork ^ parent -------/ \------------ child | | printf("1") printf("1") | | loop iterates loop iterates | | fork fork ^ ^ parent --/ \----- grandchild child --/ \----- grandchild | | | | printf("1") printf("1") printf("1") printf("1") | | | | loop ends loop ends loop ends loop ends | | | | printf("2") printf("2") printf("2") printf("2") | | | | proc ends proc ends proc ends proc ends
As we can see there are six printf("1")
calls, and four printf("2")
calls.
[I haven't added the newlines in the printf
calls, the diagram only is for counting the number of calls. Actual output may differ depending on buffering depending on stdout
target.]