【发布时间】:2015-02-26 00:07:21
【问题描述】:
我一直在尝试在 c 中实现以下命令: cat /etc/passwd |剪切-f1 -d:|排序
这是我目前得到的代码。第一个管道正常工作,但第二个管道似乎根本不工作。
我一遍又一遍地检查代码,但没有发现任何错误。谁能提供可以解决我的问题的建议?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int pipe_A[2];
int pipe_B[2];
pipe(pipe_A);
pipe(pipe_B);
pid_t pid_A, pid_B, pid_C;
if( !(pid_A = fork()) ) {
close(1); /* close normal stdout */
dup(pipe_A[1]); /* make stdout same as pipe_A[1] */
close(pipe_A[0]); /* we don't need this */
execlp("/bin/cat", "cat", "/etc/passwd" , NULL);
}
if( !(pid_B = fork()) ) {
close(0); /* close normal stdin */
dup(pipe_A[0]); /* make stdin same as pipe_A[0] */
close(pipe_A[1]); /* we don't need this */
close(1); /* close normal stdout */
dup(pipe_B[1]); /* make stdout same as pipe_B[1] */
close(pipe_B[0]); /* we don't need this */
execlp("/usr/bin/cut", "cut", "-f1", "-d:", NULL);
}
if( !(pid_C = fork()) ) {
close(0); /* close normal stdin */
dup(pipe_B[0]); /* make stdin same as pipe_B[0] */
close(pipe_B[1]); /* we don't need this */
execlp("/usr/bin/sort", "sort", NULL);
}
return 0;
}
谢谢。
【问题讨论】: