编写程序实现进程的管道通信。用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:(可以输出其他消息,消息自定)
时间: 2023-11-30 14:00:18 浏览: 58
```c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd[2];
pid_t pid;
if (pipe(fd) < 0) { // 建立管道
fprintf(stderr, "pipe error\n");
return 1;
}
pid = fork(); // 创建子进程1
if (pid < 0) {
fprintf(stderr, "fork error\n");
return 1;
} else if (pid == 0) { // 子进程1
close(fd[0]); // 关闭读端
char *msg = "Hello, I am P1.";
write(fd[1], msg, strlen(msg) + 1); // 写入消息
close(fd[1]); // 关闭写端
return 0;
} else { // 父进程
pid = fork(); // 创建子进程2
if (pid < 0) {
fprintf(stderr, "fork error\n");
return 1;
} else if (pid == 0) { // 子进程2
close(fd[1]); // 关闭写端
char buf[50];
read(fd[0], buf, sizeof(buf)); // 读取消息
printf("P2 received: %s\n", buf);
close(fd[0]); // 关闭读端
return 0;
} else { // 父进程
close(fd[0]); // 关闭读端
close(fd[1]); // 关闭写端
wait(NULL); // 等待子进程1结束
wait(NULL); // 等待子进程2结束
return 0;
}
}
}
```
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)