在C中编码多个管道

我正在尝试在C中为我的 shell实现多个管道.

我只有一个管道功能管道| b但不是| b | C.

int   c[2];
int   returnv;
pid_t id;

pipe(c);
pid = fork()) == 0
if (pid)
{
  dup2(c[1],0);
  close(p[1]);
  close(p[1]);
  execvp(array(0),array);
}

if ((pid = fork()) == 0)
{
  dup2(p[0],1);
  close(p(0));
  close(p[0]);
  returnv = execvp(array[0],array);
}

close(p[1]);
wait(NULL);
wait(NULL);
wait(NULL);
return returnv;

这是第二个版本:

int i = 0;

while (i < x)

{
 pipe(c);
 if ((pid = fork()) == 0)
 {
   dup2(t[i],1);
   if (i < 2)
       dup2(p[0],1);
   close(p[1]);
 r=  execvp(cmd[i][0],cmd[i]);
 }
     wait(NULL);
     close(p[0]);
     i += 1;
     t[i] = p[1];

我怎样才能添加一些能使这段代码管理多个管道的东西呢?
非常感谢提前!

解决方法

编辑:根据您的评论

要执行多重管道,您需要将所有命令存储在某处.
这就是我使用结构选项卡的原因.

检查这个新版本可能更容易理解

首先,您需要一个选项卡或其他东西来存储所有命令:

int main()
{
  char *ls[] = {"ls",NULL};
  char *grep[] = {"grep","pipe",NULL};
  char *wc[] = {"wc",NULL};
  char **cmd[] = {ls,grep,wc,NULL};

  loop_pipe(cmd);
  return (0);
}

然后是将运行选项卡并启动所有内容函数

void    loop_pipe(char ***cmd) 
{
  int   p[2];
  pid_t pid;
  int   fd_in = 0;

  while (*cmd != NULL)
    {
      pipe(p);
      if ((pid = fork()) == -1)
        {
          exit(EXIT_FAILURE);
        }
      else if (pid == 0)
        {
          dup2(fd_in,0); //change the input according to the old one 
          if (*(cmd + 1) != NULL)
            dup2(p[1],1);
          close(p[0]);
          execvp((*cmd)[0],*cmd);
          exit(EXIT_FAILURE);
        }
      else
        {
          wait(NULL);
          close(p[1]);
          fd_in = p[0]; //save the input for the next command
          cmd++;
        }
    }
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...