我 fork()'da 子进程并在它们之间创建了管道,并且能够将参数 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);
}