【问题标题】:Redirection ambiguity [duplicate]重定向歧义[重复]
【发布时间】:2019-02-19 14:54:29
【问题描述】:

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

附:这在没有重定向器的情况下工作正常。

【问题讨论】:

  • 输出被缓冲。当forking 时缓冲区被复制。它可能包含或不包含在fork 之前写在那里的字符。如果您想要可预测的行为,请使用fflush
  • @EugeneSh。谢谢!

标签: c linux gcc system-calls


【解决方案1】:

我认为是缓冲区的原因,试试下面的代码:

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

int main() {
    printf("T\n");
    fflush(stdout);
    fork();
    printf("F\n");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2017-12-02
    相关资源
    最近更新 更多