1
私はパイピングを実行するプログラムを実行しています。 実行したいコマンドはls |ネコ。Cでパイプ、dup2、ファイル記述子を閉じますか?
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はうまくいきます(ただし、パイプは閉じず、ただ何もしないで待っています)。私はストリームや何かを閉じなかったからだと思うが、確かに知るためにはC/IOで十分に精通していない。私はこの権利をしていますか?
この関数を実行するコードが
int fd[2];
int p = pipe(fd);
cmd(w, fd, 1);
cmd(w, fd, 0);
編集のようなものです:ウル右、致命、私はarguementに
thxsをミスタイプし、私はちょうどパイプを閉じるために必要なように見えます[1]で親