编写一c语言程序,实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“i am father”,儿子进程执行时屏幕显示“i am son”,女儿进
时间: 2023-05-31 15:20:05 浏览: 146
### 回答1:
程执行时屏幕显示“i am daughter”。
下面是实现该功能的C语言程序:
```
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid1, pid2;
pid1 = fork(); // 创建第一个子进程
if (pid1 < ) {
printf("Error: fork() failed.\n");
return 1;
} else if (pid1 == ) {
// 子进程1
printf("i am son\n");
} else {
// 父进程
pid2 = fork(); // 创建第二个子进程
if (pid2 < ) {
printf("Error: fork() failed.\n");
return 1;
} else if (pid2 == ) {
// 子进程2
printf("i am daughter\n");
} else {
// 父进程
printf("i am father\n");
}
}
return ;
}
```
### 回答2:
编写一个 C 语言程序,可以利用系统调用 fork() 创建两个子进程,从而实现父进程和两个子进程一起并发执行。
在程序运行时,如果调用 fork() 返回了一个大于 0 的值,则表示当前代码正在运行的是父进程。如果返回 0,则表示当前代码正在运行的是一个子进程。
为了完成本程序的目标,我们可以在父进程、子进程 A 和子进程 B 中分别输出不同的信息。
代码如下:
```
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pidA, pidB; // 执行 fork() 时返回的进程 ID
pidA = fork(); // 创建子进程 A
if (pidA == 0) { // 子进程 A
printf("I am son.\n");
return 0; // 子进程 A 执行结束
} else {
pidB = fork(); // 父进程再次创建子进程 B
if (pidB == 0) { // 子进程 B
printf("I am daughter.\n");
return 0; // 子进程 B 执行结束
} else { // 父进程
printf("I am father.\n");
return 0; // 父进程执行结束
}
}
}
```
在执行这个程序时,会先输出 "I am father",然后又分别创建出了两个子进程,分别输出 "I am son" 和 "I am daughter"。
需要注意的是,在这个程序中,当我们创建完一个子进程后,就要根据 fork() 的返回值来判断当前代码执行的是在父进程还是在子进程中,这样才能保证所有进程都能够并发执行。
总体来说,这个程序的实现并不复杂,只需理解 fork() 的使用方法,就能够比较流畅地完成这个任务。
### 回答3:
C语言中可以通过调用系统调用fork()来创建新的进程。fork()会返回两次,一次返回父进程PID,一次返回子进程PID。我们可以根据不同的返回值来判断,是父进程还是子进程。
首先,我们需要在程序中引入<unistd.h>头文件,这个头文件中包含了fork()函数的声明。
创建父进程:
pid_t pid;
pid = fork();
if (pid < 0) {
// 创建子进程失败,输出错误信息
fprintf(stderr, "fork error");
exit(1);
}
if (pid > 0) {
// 父进程,输出"I am father"
printf("I am father\n");
wait(NULL);
}
创建两个子进程:
pid_t pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
// 创建子进程失败,输出错误信息
fprintf(stderr, "fork error");
exit(1);
}
else if (pid1 == 0) {
// 第一个子进程,输出"I am son"
printf("I am son\n");
exit(0);
}
else {
pid2 = fork();
if (pid2 < 0) {
// 创建子进程失败,输出错误信息
fprintf(stderr, "fork error");
exit(1);
}
else if (pid2 == 0) {
// 第二个子进程,输出"I am daughter"
printf("I am daughter\n");
exit(0);
}
}
在上面的代码中,我们分别创建了一个父进程和两个子进程。父进程会输出“I am father”,并在执行完子进程后等待子进程结束。子进程1会输出“I am son”,子进程2会输出“I am daughter”。可以看到,三个进程会在屏幕上同时输出自己的标识。
完整的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
fprintf(stderr, "fork error");
exit(1);
}
else if (pid1 == 0) {
printf("I am son\n");
exit(0);
}
else {
pid2 = fork();
if (pid2 < 0) {
fprintf(stderr, "fork error");
exit(1);
}
else if (pid2 == 0) {
printf("I am daughter\n");
exit(0);
}
else {
printf("I am father\n");
wait(NULL);
wait(NULL);
}
}
return 0;
}
阅读全文