首页 > 解决方案 > 在 C 中将三个命令连接在一起

问题描述

我正在尝试创建自己的“unix 风格”外壳。我希望能够使用循环将 N 个命令连接在一起。然而到目前为止我一直没有成功。我能够将 2 个命令连接在一起,现在我正在尝试将 3 个命令连接在一起。当我执行时,什么都没有发生,似乎父进程只是在等待子进程。作为参考,我要执行的命令是: ls | 头-3 | 尾-1。

      int p1[2], p2[2]; //pipes
      pipe(p1);
      int pid1, pid2;
      pid1 = fork(); //create child
      if (pid1 ==0) { //child
        close(1); //close stdout
        dup(p1[1]); 
        close(p1[0]); //closes pipes we dont need
        close(p1[1]);
        exec(command[0][0], command[0]); //execute command
        exit(0);
      }
      pipe(p2); //create 2nd pipe
      pid2=fork(); //create child
      if(pid2 == 0) { //child process
        close(0); //close stdin
        dup(p1[0]);
        close(p1[0]); //close pipes we dont need
        close(p1[1]);
        close(1); //close stdout
        dup(p2[1]);
        close(p2[0]);
        close(p2[1]);
        exec(command[1][0], command[0]); //execute command
        exit(0);
      }
      else
      { //parent
        wait(NULL); //stops here
        wait(NULL); //waiting for child processes to complete
        close(p1[0]);
        close(p1[1]);
        close(0); //close stdin
        dup(p2[0]);
        close(p2[0]); //close pipes we dont need
        close(p2[1]);
        exec(command[2][0], command[2]); //execute command
      }

标签: cpipefork

解决方案


推荐阅读