重定向到execlp()

时间:2014-01-08 17:31:38

标签: c linux exec fork dup

我遇到了execlp的问题。当我不知道如何正确地将指针数组中的命令重定向到execlp。例如,我想使用

ls -l | sort -n

我的程序只需要" ls"和"排序"

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

      }
      else 
      {
        wait(&child_status); 
            close(0);
        dup(pfds[0]);
        close(pfds[1]); 
            execlp(*arg2, NULL);
      }

所有命令都在指针数组中,其中:ls -l位于第一个表中,sort -n位于第二个表中

1 个答案:

答案 0 :(得分:0)

您可能想使用dup2重定向stdin和stdout。你也没有正确使用execlp。它期望由NULL指针终止的可变数量的参数。并且正如评论所建议的那样,wait命令不应该存在。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    int pfds[2];
    pipe(pfds);
    int child_pid;
    child_pid = fork();
    if(child_pid==0)
    {       
        dup2(pfds[1], 1);   
        close(pfds[0]); 
        execlp("ls", "-al", NULL);

    }
    else 
    {
        dup2(pfds[0], 0);
        close(pfds[1]); 
        execlp("sort", "-n", NULL);
    }
}