2.利用Pipe构建管道,实现 cat /etc/passwd | wc -l 的功能,c语言实现程序
时间: 2024-05-09 17:20:32 浏览: 86
以下是使用C语言编写的实现程序:
```c
#include <unistd.h>
#include <stdio.h>
int main() {
int fd[2];
pid_t pid;
if(pipe(fd) < 0) {
printf("Error: Failed to create pipe.\n");
return 1;
}
if((pid = fork()) < 0) {
printf("Error: Failed to fork.\n");
return 1;
}
else if(pid > 0) { // parent process
close(fd[0]); // close read end of pipe
dup2(fd[1], STDOUT_FILENO); // redirect stdout to pipe write end
close(fd[1]); // close pipe write end
execlp("cat", "cat", "/etc/passwd", NULL); // execute cat command
}
else { // child process
close(fd[1]); // close write end of pipe
dup2(fd[0], STDIN_FILENO); // redirect stdin to pipe read end
close(fd[0]); // close pipe read end
execlp("wc", "wc", "-l", NULL); // execute wc command
}
return 0;
}
```
该程序使用pipe函数创建了一个管道,然后使用fork函数创建了一个子进程和一个父进程。父进程使用dup2函数将标准输出重定向到管道的写入端,并执行cat命令,将/etc/passwd文件的内容写入管道。子进程使用dup2函数将标准输入重定向到管道的读取端,并执行wc命令,对管道中的内容进行行数统计。最终输出的结果就是/etc/passwd文件的行数。
阅读全文