0

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 -n2 番目のテーブルにあります。

4

1 に答える 1

0

おそらく、dup2 を使用して stdin と stdout をリダイレクトしたかったでしょう。また、execlp を正しく使用していません。NULL ポインターで終了する可変数のパラメーターが必要です。コメントで示唆されているように、待機コマンドは存在しません。

#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);
    }
}
于 2014-01-08T17:41:17.980 に答える