0
私は、コンソール入力(私がUNIXで入力したもの)から単語を数えるために子プロセスを使用しようとしています。ここに私のコードは次のとおりです。子プロセスを使用して入力を読み取っていますか?
int main(){
int pipe1[2];
int child_value;
pipe(pipe1);
child_value= fork();
if(child_value > 0){
/*parent*/
int word_count;
dup2(STDIN_FILENO, pipe1[0]);
close(pipe1[0]);
scanf("%d", &word_count);
printf("%d\n", word_count);
} else if (child_value == 0) {
/*child*/
dup2(pipe1[1], STDOUT_FILENO);
close(pipe1[1]);
execl("/usr/bin/wc", "wc", "-w", NULL);
err(EX_OSERR, "exec error");
} else err(EX_OSERR, "fork error");
return 0;
}
私のコンソール上に表示される出力は、私がコンソールに入力する内容無視して常に0である、と私は常にエラーが言ってます:
wc: standard input: Input/output error
あなたが使用している場合パイプの一端を標準入力または標準出力にマップするには、 'dup2()'または 'dup()'を使用すると、後でパイプの両端を閉じることはほぼ確実です。例外は非常に少なく、遠いです。パイプの両端を閉じないようにする必要があるときは、わかります。しかし、それはあなたの問題の直接の原因ではありません。 –
「dup2(STDIN_FILENO、pipe1 [0]);」と「dup2(pipe1 [1]、STDOUT_FILENO);」です。 2つ目の引数として、標準ファイル番号を両方指定する必要があります。 –
dup2(pipe1 [1]、STDOUT_FILENO)とdup2(pipe1 [0]、STDIN_FILENO)である必要がありますか? –