CareerCup Fork Problem

2014-11-24 09:38:53 · 作者: · 浏览: 3
How many times “Hello World” is printed by following program
int main()
{
if(fork() && fork())
{
fork()
}
if(fork() || fork())
{
fork()
}

printf(“Hello world”)
return 0
}

a. 16
b. 20
c. 24

d. 64

----------------------------------------------------------------

b.20

----------------------------------------------------------------

pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在# include< sys/types.h>中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

because:

#include 
  
   
#include 
   
     using namespace std; int main() { if (fork() && fork()) printf("Hello World\n"); return 0; } 
   
  

The result is 1 Hello World. Only the parent process could print and the child process couldn't print.

#include 
  
   
#include 
   
     using namespace std; int main() { if (fork() || fork()) printf("Hello World\n"); return 0; } 
   
  

The result is 2 Hello Worlds, the child process will execute the fork after ||, but for && the child process will start after printf. Since the parent process get an ID and child process get an 0.

#include 
  
   
#include 
   
     using namespace std; int main() { if (fork() || fork() || fork()) printf("Hello World\n"); return 0; } 
   
  

The result is 3 Hello World.

#include 
  
   
#include 
   
     using namespace std; int main() { if (fork() || fork() || fork()) fork(); printf("Hello World\n"); return 0; } 
   
  

7 Hello worlds!