重定向歧义
Redirection ambiguity
我有一个名为 test.c 的文件(其内容如下)
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("T\n");
fork();
printf("F\n");
}
预期结果是:
T
F
F
用gcc编译并执行./a.out
,输出为:
T
F
F
符合预期答案。
但是当我将输出重定向到另一个文件时会出现歧义。
$ ./a.out > Output.txt
Output.txt有以下数据:
T
F
T
F
为什么我使用重定向器时 Output.txt 文件中多了一个 T?
1) 我已经在安装了 gcc 的 ubuntu 上的多台 PC 运行 中检查了这一点。
2) 尝试删除 Output.txt 并将所有文件移动到不同的位置,但这仍然存在。
P.s。这在没有重定向器的情况下工作正常。
我认为是缓冲区的原因,试试下面的代码:
#include <stdio.h>
#include <unistd.h>
int main() {
printf("T\n");
fflush(stdout);
fork();
printf("F\n");
}
我有一个名为 test.c 的文件(其内容如下)
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("T\n");
fork();
printf("F\n");
}
预期结果是:
T
F
F
用gcc编译并执行./a.out
,输出为:
T
F
F
符合预期答案。
但是当我将输出重定向到另一个文件时会出现歧义。
$ ./a.out > Output.txt
Output.txt有以下数据:
T
F
T
F
为什么我使用重定向器时 Output.txt 文件中多了一个 T?
1) 我已经在安装了 gcc 的 ubuntu 上的多台 PC 运行 中检查了这一点。
2) 尝试删除 Output.txt 并将所有文件移动到不同的位置,但这仍然存在。
P.s。这在没有重定向器的情况下工作正常。
我认为是缓冲区的原因,试试下面的代码:
#include <stdio.h>
#include <unistd.h>
int main() {
printf("T\n");
fflush(stdout);
fork();
printf("F\n");
}