父进程创建一个子进程和一个无名管道fd,由子进程向管道写入信息“This is a message!”,然后终止执行;父进程接收到子进程终止信号后,从管道中读出并显示信息后结束。写个代码
时间: 2024-12-10 07:30:10 浏览: 12
在Unix/Linux系统中,可以使用fork()函数创建子进程,pipe()函数创建无名管道,并结合waitpid()来处理子进程的退出。下面是一个简单的C语言示例:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define BUFFER_SIZE 256
int main() {
int parent_pipe[2], child_pipe[2];
char input[BUFFER_SIZE] = "This is a message!";
// 创建管道
if (pipe(parent_pipe) == -1) {
perror("Failed to create pipes");
return 1;
}
pid_t child_pid = fork();
// 子进程部分
if (child_pid == 0) { // 孩子进程
close(parent_pipe[0]); // 关闭父管道的读端
dup2(child_pipe[1], STDOUT_FILENO); // 将管道的写端连接到标准输出
// 向管道写入数据
write(child_pipe[0], input, strlen(input));
printf("Child process wrote to pipe and exiting...\n");
exit(0);
} else { // 父亲进程
close(child_pipe[1]); // 关闭孩子管道的写端
close(parent_pipe[1]); // 父亲保留读端用于接收消息
// 接收并打印子进程的信息
read(parent_pipe[0], input, BUFFER_SIZE);
printf("Parent process received: %s\n", input);
// 等待子进程结束
wait(NULL);
close(parent_pipe[0]);
printf("Parent process ended.\n");
}
return 0;
}
```
在这个例子中,父进程创建了两个管道,并将它们的一端传递给子进程。子进程通过管道写入信息,然后关闭管道并退出。父进程通过管道的另一端接收数据,再等待子进程结束。
阅读全文