子プロセスを fork() して、それらの間にパイプを作成し、引数 argv[1] を子プロセスに送信できます。argv[1] から提供されたファイル名を子に取得させ、execl("/bin/cat","cat",(char *) 0); を実行させたい 子にパイプされたファイル名を execl にルーティングするにはどうすればよいですか?
同封は明確にするための私のコードです:
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);
}