您的位置:首页 > 其它

CareerCup Fork Problem

2014-02-23 00:09 288 查看
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 <stdio.h>
#include <unistd.h>
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 <stdio.h>
#include <unistd.h>
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 <stdio.h>
#include <unistd.h>
using namespace std;
int main() {
  if (fork() || fork() || fork())
    printf("Hello World\n");
  return 0;
}


The result is 3 Hello World.

#include <stdio.h>
#include <unistd.h>
using namespace std;
int main() {
  if (fork() || fork() || fork())
    fork();
  printf("Hello World\n");
  return 0;
}


7 Hello worlds!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: