在C中实现多个管道

时间:2015-03-11 14:06:36

标签: c

我正在做类似bash的命令,我开始实现多个管道和reddirections。

目前我有这段代码:

int execute_pipe(t_comm *com, t_struct *tool, char **env)
{
  int   pipefd[2 * tool->nbr_pipe];
  int   i;
  int   j;
  pid_t pid;

  i = -1;
  //pipefd = xmalloc(sizeof(int) * tool->nbr_pipe * 2);
  while (++i != tool->nbr_pipe)
    pipe(pipefd + i * 2);
  j = 0;
  while (com != NULL)
    {
      pid = fork();
      if (pid == 0)
    {
      if (com->next != NULL)
        dup2(pipefd[j + 1], 1);
      if (j != 0)
        dup2(pipefd[j - 2], 0);
      i = -1;
      while (++i < 2 * tool->nbr_pipe)
        close(pipefd[i]);
      printf("%s\n", com->argv[0]);
      execve(com->argv[0], com->argv, env);
    }
      com = com->next;
      j = j + 2;
    }
  i = -1;
  while (++i < 2 * tool->nbr_pipe)
    close(pipefd[i]);
  i = -1;
  while (++i != tool->nbr_pipe + 1)
    wait(NULL);
}

但这似乎不起作用。当我发布类似&#34; ls |的东西时猫-e&#34;它只是显示正常的ls然后我必须做一个控制C来回到我的提示。 你知道这可能来自哪里吗?

对于缩进感到抱歉,Stack溢出似乎不喜欢emacs表格......

0 个答案:

没有答案