重定向模糊[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我有一个名为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并将所有文件移动到其他位置,但这仍然存在。

附:没有重定向器,这工作正常。

c linux gcc system-calls
1个回答
2
投票

我认为这是因为缓冲区,请尝试使用以下代码:

#include <stdio.h>
#include <unistd.h>

int main() {
    printf("T\n");
    fflush(stdout);
    fork();
    printf("F\n");
}
© www.soinside.com 2019 - 2024. All rights reserved.