赞
踩
pid_t fork(void);
- 1. #include <stdio.h>
- 2. #include <stdlib.h>
- 3. #include <unistd.h>
- 4. #include <string.h>
- 5. #include <assert.h>
- 6.
- 7. int main(int argc, char* argv[],char* envp[])
- 8. {
- 9. char * s = NULL;
- 10. int n = 0;
- 11.
- 12. pid_t pid = fork();
- 13. assert( pid != -1 );
- 14.
- 15. if ( pid == 0 )
- 16. {
- 17. s = "child";
- 18. n = 4;
- 19. }
- 20. else
- 21. {
- 22. s = "parent";
- 23. n = 7;
- 24. }
- 25.
- 26. int i = 0;
- 27.
- 28. for(; i < n; i++ )
- 29. {
- 30. printf("pid=%d,n=%d,&n=%x,s=%s\n",getpid(),n,&n,s);
- 31. sleep(1);
- 32. }
- 33.
- 34. exit(0);
- 35. }
下列程序分别输出几个“A”?
代码一:
- 1. int main(int argc, char* argv[],char* envp[])
- 2. {
- 3. int i = 0;
- 4. for( ; i < 2; i++ )
- 5. {
- 6. fork();
- 7. printf("A\n");
- 8. }
- 9. exit(0);
- 10. }
代码二:
- 1. int main(int argc, char* argv[],char* envp[])
- 2. {
- 3. int i = 0;
- 4. for( ; i < 2; i++ )
- 5. {
- 6. fork();
- 7. printf("A");
- 8. }
- 9. exit(0);
- 10. }
代码三:
- 1. int main()
- 2. {
- 3. fork() || fork();
- 4. printf("A\n");
- 5. exit(0);
- 6. }
解:代码一输出4个"A",代码二输出8个"A",代码三输出2个"A。
代码一的循环中,每次循环都会调用fork()函数,所以会产生2^2=4个子进程,每个子进程都会打印一个"A"。
代码二的循环中,每次循环都会调用fork()函数,所以会产生2^3=8个子进程,每个子进程都会打印一个"A"。
代码三中的fork()函数调用两次,第一次调用后会产生一个子进程,然后第二次调用后,父进程和子进程各自再产生一个子进程,所以总共会有2个子进程,每个子进程都会打印一个"A"。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。