2016-10-07 29 views
-2

私はシェル、パイプ、フォークを実装しています。私は基本的に同じ親の2つの子プロセス間でメッセージを渡しています。個々のコマンドの作業ではなくパイプコマンドが機能しない不良なファイル記述子のようなエラーが発生する。誰もこれで私を助けることができますか?stat failed: - :不正なファイル記述子

以下は私のコードです。

/*それは子供が*/

if ((pid = waitpid(pid, &status, 0)) < 0) 

cout<<"waitpid error"; 

/* calling method, to create second process and execute it */ 

secondExecute(command2); 

} 

// Second process will be created here 

void secondExecute(char *command2) 

{ 

if ((pid = fork()) <0) 

cout<<"fork error"; 

else if (pid == 0) 

{ 

dup2(pipeA[0],0); 

close(pipeA[1]); 


/* Executing the second process */ 

if(execvp(*args,args)<0) 

{ 

cout<<"couldn't execute:"<< command2<<'\n'; 

} 

} 

if ((pid = waitpid(pid, &status, 0)) < 0) 

cout<<"waitpid error"; 

}  
を完了するまで待って、親には*/

else if (pid == 0) 
{ 

/* child */ 

if(pipe(pipeA)==-1) 

cerr<<"Pipe Creation error"<<'\n'; 

/* Duplicating the output */  

dup2(pipeA[1],1); 

close(pipeA[0]); 

/* Running the first command */ 

if(execvp(*command1,command1)<0) 

{ 

cout<<"error in executing:"<< command<<'\n'; 

} 

} 

/*子である場合は、親*/

if ((pid = fork()) <0) 

cout<<"fork error"; 

/*をフォーク

+0

_「誰かがすぐに助けることができる」_これはサイトの目的ではありません。申し訳ありません。 –

+0

誰もコードを正しくインデントできない人を支援したいので、実際には読めるようにしてください。あなたのコードを他人に読めるようにする努力を無駄にしたくなければ、なぜ誰かがそれを理解する時間を無駄にするべきですか? –

+0

子プロセスで作成したパイプは、親プロセスでは使用できません。 2つのプロセス間で通信を行う場合は、パイプ* before *を作成する必要があります。 –

答えて

0

forkに電話する前にパイプを作成する必要があります。親子がそれぞれpipeの場合、それぞれ異なるパイプが作成されます。 2つのプロセス間に共有パイプが必要です。

関連する問題