端末で直接実行した場合と、その出力がファイルにリダイレクトされた場合に、異なる出力を提供するテストコードに出くわしました。
# include <stdio.h>
# include <stdlib.h>
int main()
{
printf("hello\n");
if(fork() ==0)
{
printf("world\n");
}
}
ターミナルでの出力は次のとおりです。
abhi@ubuntu:~/Desktop/ad/A1/CC$ ./vb
hello
abhi@ubuntu:~/Desktop/ad/A1/CC$ world
(ワールドを印刷した後もカーソルは点滅し続け、Enterキーを押すと通常のプロンプトが表示されます。)
出力をファイルにリダイレクトする場合:
./vb >v.txt
abhi@ubuntu:~/Desktop/ad/A1/CC$ cat v.txt
hello
hello
world
親が子を待っていないことを私が理解している限り、それは印刷してhello
返されます。次に、子は印刷world
し、コードを終了する必要があります。
私が理解できないのは、出力がリダイレクトされたときにコードが異なる動作をする理由です。これの原因は何ですか?