两个重定向程序(Two redirect in program)

2019-10-19 04:02发布

我尝试写命令解释器在C.我必须创建DWO和三个重定向(例如ls | grep ^d | wc -lls -ps | grep / | pr -3 | more

我有一些代码来操作一个重定向

    if(k==1)
{
  int pfds[2];
  pipe(pfds);
  child_pid = fork();
  if(child_pid==0)
  {       
    close(1);       
        dup(pfds[1]);   
        close(pfds[0]); 
        execlp(arg1[0], *arg1, NULL);
  }
  else 
  {
        close(0);      
        dup(pfds[0]);
        close(pfds[1]); 
        execlp(arg2[0], *arg2, NULL);
  }     
}

我的问题是如何通过让两个和三个重定向pipefork

我试图做到这一点只用一个管道,但是这不行。

Answer 1:

你必须创造尽可能多pipe变量有“分流”。 然后创建命令的列表。

如果你想父进程休假,你会叉每个命令的过程。 否则一个都不能少。

对于第一个命令, dup或“dup2`只为STDOUT。

并为最后的命令dup用于STDIN或“dup2`只。

其余的, dup或“dup2`的STDIN和STDOUT两者。

你可以用一个for循环,从第2到倒数第二个做到这一点。

例如:Shell $>猫file.txt的| grep的 '模式1 |模式2' | grep的 '模式1' | 厕所-l

我假设你没有使用父进程的exec所以,你需要创建一个命令列表/阵列/向量。 名单将拥有所有4个命令。 创建4个管用于在父进程本身各命令。

运行一个循环4次迭代,每一个用于一个命令。

  • 叉一个进程。
  • 如果父进程继续下去。
  • 其他(子)
    • DUP / DUP2仅STDOUT为第一命令( cat )。
    • DUP / DUP2仅STDIN为最后一个命令( wc -l )。
    • DUP / DUP2都STDIN和STDOUT,否则。
    • 然后运行exec

CHEERS :)



文章来源: Two redirect in program
标签: c linux fork pipe