编制一段程序,实现进程的管道通信。 使用系统调用pipe)建立一条管道线;两个子进程P1和P2分别向管道中写一句话: Child 1 is sending a message! Child 2 is
时间: 2024-11-30 16:17:06 浏览: 6
在Unix/Linux系统中,可以使用`fork()`和`pipe()`函数实现进程之间的管道通信。下面是一个简单的C语言示例,展示了如何创建一个管道并让两个子进程通过管道交换信息:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#define BUFFER_SIZE 50
int main() {
int pipefd[2]; // 创建一个管道文件描述符数组
pid_t pid1, pid2; // 子进程ID
// 创建管道
if (pipe(pipefd) == -1) {
perror("Failed to create pipe");
exit(1);
}
// 父进程 fork()
pid1 = fork();
if (pid1 == 0) { // 子进程 P1
close(pipefd[1]); // 关闭读端,只写入
write(pipefd[0], "Child 1 is sending a message!\n", strlen("Child 1 is sending a message!\n") + 1); // 写入信息
printf("Child 1 finished writing to the pipe.\n");
_exit(0);
} else if (pid1 > 0) { // 父进程
close(pipefd[0]); // 关闭写端,只读取
pid2 = fork(); // 子进程 P2
if (pid2 == 0) { // 子进程 P2
read(pipefd[1], BUFFER_SIZE, &BUFFER_SIZE); // 从管道读取信息
printf("Received from Child 1: %s\n", BUFFER_SIZE);
_exit(0);
}
wait(NULL); // 等待子进程 P1 结束
} else { // fork失败
perror("Failed to fork");
exit(1);
}
return 0;
}
```
在这个例子中,父进程首先创建管道,然后创建两个子进程。子进程P1负责将消息写入管道,而子进程P2负责从管道读取信息。注意,每个子进程在完成任务后会调用`_exit(0)`,而不是`exit(0)`,这是因为我们不需要等待它们的退出状态。
阅读全文