パイピングを行うプログラムを実行しています。実行したいコマンドは ls | です。猫。
int cmd(char** w, int* pipe, int action){
... some code up here
...
int fd;
if(child_pid == 0) {
if (pipe != 0) {
if (action == 0){
fd = dup2(pipe[0], STDIN_FILENO);
close(pipe[0]);
close(pipe[1]);
//close(fd);
}
else if (action == 1){
fd = dup2(pipe[1], STDOUT_FILENO);
close(pipe[0]);
close(pipe[1]);
//close(fd);
}
}
execvp(w[0], w);
printf("Unknown command\n");
exit(0);
}
... some code down here
コードを実行すると、コマンド ls | cat は正常に動作しますが、cat は終了しません (つまり、パイプは閉じず、何もせずにそこで待機します)。ストリームか何かを閉じていなかったことが原因だと思いますが、C/IO に精通していないため、確実に知ることができません。私はこれを正しく行っていますか?
この関数を実行するコードは次のようになります
int fd[2];
int p = pipe(fd);
cmd(w, fd, 1);
cmd(w, fd, 0);
編集:あなたは正しい、致命的なエラー、私は引数を間違って入力しました
thxs、親のパイプ[1]を閉じる必要があったようです