2016-10-15 2 views
-2

私は何度も見てきましたが、これを行う方法を理解できないようです。Cでexeclpを通してpipefdを渡す

が、私は今、パイプ()

を作成した親プロセスを持って、私はその後、フォーク()親とのexeclp(したい)とコマンドライン引数として新しいプログラムに)(パイプを渡します。

新しいプログラムの中から、私はpipefdを読むことができる必要があります。

私は、同じプロセスの中からそれをどうやって行うのかについては何かを見てきましたが、このようにする方法は何もありませんでした。

編集:最初の投稿は曖昧です。

int pfd[2]; 
    if(pipe(pfd) == -1) { 
      perror("Creating pipe\n"); 
      exit(1); 
    } 
pid_t pid = fork(); 
if(pid == -1) { 
      fprintf (stderr, "Initiator Error Message : fork failed\n"); 
      return -1; 
    } 
else if(pid == 0) { // child process 
      close(pipe0[1]);  // close(write); 

      execlp("program", "program", pipe0[0], NULL); 
    } 

が、その後、私は本当に私がFDを取得するために、内部の「プログラム」から何をすべきかを理解していない:

は、私がこれまで持っていることです。私はそれをあらゆる種類のものに割り当てようとしましたが、それらはすべて誤りと思われます。

ありがとうございます!

+0

やってからあなたを停止しているものそれはまさに?どこに問題がありますか? 'dup2'が何をし、どのように使うのか知っていますか? –

+0

子プログラムでfdを取り込む方法を理解できません。 – lexIcon

+0

引数としてfdを渡すとどういう意味ですか? –

答えて

0

パイプを見つけるためのコマンドライン引数はかなり冗長であるように、フォークとexeced子が自動的に開き、パイプ記述子を継承し、パイプ出力は、通常、標準入力として供給される。

if(!pipe(&pipefd)) 
    switch(fork()) { 
    case 0: !dup2(pipefd[0],0)&& 
      execlp("cat","cat","-n","/dev/fd/0",0); 
    case -1: return perror("fork"); 
    default: write(pipefd[1],"OK\n",3); 
} 
関連する問題