1
我fork()'一個子進程和它們之間創建的管道,我可以發送參數argv [1]給孩子。我希望孩子從argv [1]獲取該文件名並執行execl(「/ bin/cat」,「cat」,(char *)0); 如何將傳遞給孩子的文件名路由到execl?C系統調用管道,叉子和execl
圍是我clearity代碼:
int main(int argc, char ** argv){
int fds[2];
char buffer[100];
int status;
if(pipe(fds) == -1){
perror("pipe creation failed");
exit(EXIT_FAILURE);
}
switch (fork()){
case 0://child
close(fds[1]); //close stdout so can only do stdin
read(fds[0],buffer,strlen(argv[1]));
printf("from parent: %s\n",argv[1]);
execl("/bin/cat","cat",(char*)0);
perror("cat failed");
exit(20);
break;
case -1: //fork failure
perror("fork failure");
exit(EXIT_FAILURE);
default: //parent
close(fds[0]); //close stdin so only can do stdout
write(fds[1],argv[1], strlen(argv[1]));
}
return (EXIT_SUCCESS);
}
謝謝,那麼讓我再問你一個問題。我想發送一個字符串給孩子,孩子將字符串排序並將其發送給另一個孩子以刪除重複。我怎麼能通過一個exec()給另一個孩子? – codeBarer 2013-05-11 18:50:57
@ user2250263使用'close()'和'dup2()將'stdout' – jthill 2013-05-11 19:09:07