作者Lsilver (LS)
看板Grad-ProbAsk
标题Re: [理工] 101交大OS
时间Sun Nov 25 01:46:17 2012
看了前几天版友问的这题,回文有点混乱,自己大概算出了答案
把自己想法写出来,顺便想确定一下自己的概念对不对(有错请纠正我)
#include <stdio.h>
main()
{
char buffer[1024]="";
int i,pid;
if(fork()==0)stract(buffer,"a"); //1号fork
fork();stract(buffer,"b"); //2号fork
if(fork()>0){ //3号fork
stract(buffer,"c");
printf("%s\n",buffer);
fflush(NULL);
}
}
求印出的abc个数
[我的想法]
P0
/ | \
P1 P2 P3
/ \ |
P12 P13 P23
|
P123
P0代表父代
Px x代表由程式第几个fork所生出
(例.P12即 由第1号fork生出的子代,再经2号fork所生出,就是第三代)
P0, 印bc
P1,P12 印abc
P2 印bc 所以总共2a,4b,4c
P3,P23,P13,P123其他因为这些process新成功fork出来的此时回传0 不符合>0所没印
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.35.165.111
1F:推 mingcloud:我题外话一下...是 strcat 可以自己跑程式看看 11/25 21:26
2F:推 sting47:不太对喔 会印出的分别是P0-bc P1-abc P12-abc P2-bc 11/25 22:20
3F:→ sting47:第三个fork是if是parent process才会执行里面的statements 11/25 22:20
4F:→ sting47:至於最後一段 我想是复制整份code跟program counter 也就 11/25 22:22
5F:→ sting47:是 是复制要从"第几行"开始继续执行这样 11/25 22:23
※ 编辑: Lsilver 来自: 111.242.26.72 (11/26 22:52)
6F:→ Lsilver:了解了~ 感谢!! 这样修改希望正确了 11/26 22:53