AFAICS、子プロセスはfork()の親プロセスからstdout/stdinを継承します。これは、なぜ次のコードが機能しないのか疑問に思います。
int main(int argc, char *argv[])
{
char *earg[] = {"echo", "Hello", NULL};
if(fork() == 0) {
printf("running echo...\n");
execv("echo", earg);
printf("done!\n");
exit(0);
} else {
sleep(2);
}
return 0;
}
この小さなプログラムを実行すると、2つのprintf()呼び出しがコンソールに正常に表示されます。しかし、エコーの呼び出しはどういうわけか失われます!コンソールの出力は次のとおりです。
running echo...
done!
エコー出力がコンソールに表示されない理由を誰かに説明してもらえますか?そして、どうすればこれを修正できますか?