//父进程从管道读取数据
时间: 2024-09-14 19:15:20 浏览: 35
在Unix/Linux系统中,父进程通过管道(pipe)与子进程进行通信,允许它们之间传递数据。当父进程想要从管道读取数据时,它需要打开管道的读端,并调用read()函数。这个函数会从管道中读取指定数量的数据块,直到管道关闭、数据读完或遇到错误。
首先,父进程通常创建一个管道,这涉及到调用pipe()系统调用,生成两个文件描述符,一个用于写入(通常是父进程),另一个用于读取(通常是子进程)。然后,父进程可以使用其中一个文件描述符(通常是读取端)读取由子进程写入的数据。
例如,以下是简单的C语言代码片段展示如何进行操作:
```c
#include <stdio.h>
#include <unistd.h>
int main() {
int pipe_fd[2];
if (pipe(pipe_fd) == -1) {
perror("Pipe creation failed");
return 1;
}
// 父进程的部分
pid_t child_pid = fork();
if (child_pid == 0) { // 子进程
close(pipe_fd[0]); // 关闭写端,只让父进程写
write(pipe_fd[1], "Hello from child", 15); // 写入数据
exit(0);
} else { // 父进程
close(pipe_fd[1]); // 关闭写端,只让子进程读
char buffer[100];
ssize_t bytes_read = read(pipe_fd[0], buffer, sizeof(buffer));
if (bytes_read > 0) {
printf("Read %zd bytes: %s\n", bytes_read, buffer);
}
wait(NULL); // 等待子进程结束
}
return 0;
}
```
在这个例子中,子进程向管道写入字符串,而父进程从管道读取并打印出来。
阅读全文