请设计出使用一个管道实现父进程与子进程通信的程序
时间: 2023-12-10 08:41:53 浏览: 84
这里提供一个简单的使用管道实现父进程与子进程通信的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define MSG_SIZE 100
int main() {
int pipefd[2]; // 管道文件描述符数组
char msg[MSG_SIZE];
pid_t pid;
if (pipe(pipefd) == -1) { // 创建管道
perror("pipe");
exit(EXIT_FAILURE);
}
pid = fork(); // 创建子进程
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid == 0) { // 子进程
close(pipefd[1]); // 子进程关闭写端
while (1) {
int bytes_read = read(pipefd[0], msg, MSG_SIZE); // 从管道读取消息
if (bytes_read <= 0) break; // 如果读取到空或者出错,退出循环
printf("Child process received message: %s\n", msg);
}
close(pipefd[0]); // 关闭读端
exit(EXIT_SUCCESS);
} else { // 父进程
close(pipefd[0]); // 父进程关闭读端
printf("Enter some message to child process:\n");
while (fgets(msg, MSG_SIZE, stdin) != NULL) { // 从标准输入读取消息
write(pipefd[1], msg, strlen(msg)); // 写入管道
}
close(pipefd[1]); // 关闭写端
wait(NULL); // 等待子进程退出
exit(EXIT_SUCCESS);
}
}
```
这个程序创建了一个管道文件描述符数组 `pipefd`,调用 `pipe()` 函数创建管道。然后使用 `fork()` 函数创建一个子进程,子进程从管道中读取消息并打印,父进程从标准输入读取消息,然后写入管道。最后父进程等待子进程退出,然后程序结束。
阅读全文
相关推荐
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)