在C中编写自己的shell - 如何制作两个以上的管道?

时间:2012-02-12 20:48:11

标签: c shell pipe

我正在编写自己的shell,我遇到了关于流程化的问题。

我正确地处理两个过程,例如:

ls -l | sort -r

但是当我有三个命令时,我不知道该怎么做。

我有三种方法:

run_first:

  dup2(pfd[1], 1);
  close(pfd[0]);
  execvp(cmd[0], cmd);

run_mid:

  dup2(pfd[1], 1);
  dup2(pfd[0], 1);
  execvp(cmd[0], cmd);

和run_last:

  dup2(pfd[0], 0);
  close(pfd[1]);
  execvp(cmd[0], cmd);
  perror(command_list[i][0]);

这些基本上是重要的部分,我无法在这三种方法中实现我的逻辑,

我希望run_first的输出应该是run_mid的输入,我想将run_mid的输出传递给run_last。

1 个答案:

答案 0 :(得分:1)

如果有三个命令,则需要两个管道,一个用于将第一个命令连接到第二个命令,另一个用于将第二个命令连接到第三个命令。 (毕竟,命令行看起来像first | mid | last。)