写一个read_pipe.c文件,实现父进程通过管道读取子进程的标准输出
时间: 2024-06-10 15:09:10 浏览: 95
好的,这是一个关于Linux管道的问题,我很乐意为您提供帮助。以下是read_pipe.c文件的代码实现:
```
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
int main()
{
int fd[2];
pid_t pid;
char buf[1024];
/* 创建管道 */
if (pipe(fd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
/* 创建子进程 */
if ((pid = fork()) == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid == 0) {
/* 子进程关闭读端 */
close(fd[0]);
/* 将标准输出重定向到管道写端 */
if (dup2(fd[1], STDOUT_FILENO) == -1) {
perror("dup2");
exit(EXIT_FAILURE);
}
/* 执行子进程命令 */
if (execlp("ls", "ls", "-l", NULL) == -1) {
perror("execlp");
exit(EXIT_FAILURE);
}
} else {
/* 父进程关闭写端 */
close(fd[1]);
/* 读取子进程的标准输出 */
while (read(fd[0], buf, sizeof(buf)) > 0) {
printf("%s", buf);
}
/* 等待子进程结束 */
wait(NULL);
}
return 0;
}
```
这个程序创建了一个管道,然后创建了一个子进程来执行ls -l命令,并将标准输出重定向到管道写端。父进程则关闭了管道写端,并从管道读取子进程的标准输出,并打印出来。最后,父进程等待子进程结束。希望这个答案能够解决您的问题。
阅读全文