下面是我試圖得到它的工作代碼....創建管道 - 的Unix
我期待輸出
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 */
}
}
非常感謝Tanmoy提供的信息。我現在知道爲什麼我的早期計劃行爲不正常。我調整了我的代碼,並且它按照我希望的方式工作。你有很大的幫助。 – Josh 2012-07-15 23:01:01
@Josh,歡迎喬希! – 2012-07-16 05:37:17