编制一段程序,实现进程的管道通信。使用pipe()建立一条管道线。
时间: 2024-02-13 07:00:31 浏览: 32
好的,以下是一个简单的示例程序,实现了进程之间的管道通信:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 1024
int main() {
int fd[2];
pid_t pid;
char buffer[BUFFER_SIZE];
// 创建管道
if (pipe(fd) < 0) {
fprintf(stderr, "pipe error\n");
exit(EXIT_FAILURE);
}
// 创建子进程
if ((pid = fork()) < 0) {
fprintf(stderr, "fork error\n");
exit(EXIT_FAILURE);
}
else if (pid > 0) { // 父进程
close(fd[0]); // 关闭读端
printf("Parent process: Input a message to send to child process:\n");
fgets(buffer, BUFFER_SIZE, stdin);
// 写入管道
write(fd[1], buffer, strlen(buffer) + 1);
close(fd[1]); // 关闭写端
wait(NULL); // 等待子进程结束
exit(EXIT_SUCCESS);
}
else { // 子进程
close(fd[1]); // 关闭写端
// 从管道读取
read(fd[0], buffer, BUFFER_SIZE);
printf("Child process: Message received from parent process: %s", buffer);
close(fd[0]); // 关闭读端
exit(EXIT_SUCCESS);
}
}
```
该程序中,首先使用 `pipe()` 函数创建了一个管道。父进程通过 `fork()` 函数创建了一个子进程,然后父进程在标准输入中读取一条消息,通过 `write()` 函数写入管道。子进程从管道中读取这条消息,并在标准输出中输出。
注意,父进程要先关闭管道的读端,子进程要先关闭管道的写端,这是为了避免产生死锁。在管道传递消息结束后,各自关闭管道的另一端。最后,父进程通过 `wait()` 函数等待子进程结束。