fork2.C #include <stdio.h> main( { int p1,p2; while((p1=fork( )==-1);/*创建子进程p1*/ _if (p1==0) putchar('b'); else while((p2=fork( )==-1);/*创建子进程p2*/ if(p2==0) putchar('c'); else putchar('a'): 修改实验二fork2的程序,将wait() 放至putchar('a°)语句之前,记录结果并分析原因。
时间: 2024-02-12 07:03:47 浏览: 67
举例讲解C语言的fork()函数创建子进程的用法
修改后的程序如下:
```C
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int p1, p2, status;
while((p1 = fork()) == -1); /*创建子进程p1*/
if (p1 == 0) {
putchar('b');
} else {
while((p2 = fork()) == -1); /*创建子进程p2*/
if (p2 == 0) {
putchar('c');
} else {
wait(&status);
putchar('a');
}
}
return 0;
}
```
原程序中,等待子进程结束的 `wait` 函数被放在了最后,导致在打印 'a' 前可能会先打印 'b' 或 'c'。因为子进程的运行顺序是不确定的,而且可能在父进程之前结束。所以我们需要将 `wait` 函数移动到打印 'a' 前,让父进程先等待子进程结束,再打印 'a'。这样就能保证输出结果的正确性了。
阅读全文