我遇到了一些测试代码,这些代码在直接在终端上执行以及将其输出重定向到文件时会给出不同的输出:
# 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
(打印世界后光标仍在闪烁,按回车后显示正常提示。)
在将输出重定向到文件时:
./vb >v.txt
abhi@ubuntu:~/Desktop/ad/A1/CC$ cat v.txt
hello
hello
world
据我了解,父母并没有等待它打印hello
和返回的孩子。然后孩子应该打印world
并且代码应该终止。
我无法理解的是为什么代码在其输出被重定向时表现不同。这是什么原因?