我对execlp有问题。当我不知道如何将命令从指针数组正确重定向到execlp时。例如我想使用

ls -l | sort -n


我的程序只接受“ ls”和“ sort”

      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在第二个表中

最佳答案

您可能想使用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);
    }
}

关于c - 重定向到execlp(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21002558/

10-11 07:51