下面是我试图让它工作的代码....
我期待输出为
OUTPUT from PipeAttempt(args1, args2)
其次是
I am here
OUTPUT from PipeAttempt(args3, args4)
但实际上,我只得到 PipeAttempt(args1, args2); 的输出。
并且程序等待我的输入,当我按下回车键时程序终止
你能告诉我我在这里想念什么吗?
int main () {
char* args1 [] = {"/usr/bin/head", "/etc/passwd", NULL};
char* args2 [] = {"/bin/sort", NULL};
char* args3 [] = {"/bin/cat", "piped.input", NULL};
char* args4 [] = {"/usr/bin/wc", NULL};
PipeAttempt(args1, args2);
printf("I am here\n");
PipeAttempt(args3, args4);
return 0;
}
void PipeAttempt(char* args1[], char* args2[]) {
int pfildes[2]; <br>
pid_t cpid1, cpid2; <br>
char *envp[] = { NULL };<br>
if (pipe(pfildes) == -1) {perror("demo1"); exit(1);}
if ((cpid1 = fork()) == -1) {perror("demo2"); exit(1);}
else if (cpid1 == 0) { /* child: "cat a" */
close(pfildes[0]); /* close read end of pipe */
dup2(pfildes[1],1); /* make 1 same as write-to end of pipe */
close(pfildes[1]); /* close excess fildes */
execve(args1[0], args1, envp);
perror("demo3"); /* still around? exec failed */
exit(1); /* no flush */
}
else { /* parent: "/usr/bin/wc" */
close(pfildes[1]); /* close write end of pipe */
dup2(pfildes[0],0); /* make 0 same as read-from end of pipe */
close(pfildes[0]); /* close excess fildes */
execve(args2[0], args2, envp);
perror("demo4"); /* still around? exec failed */
exit(1); /* parent flushes */
}
}