重定向歧义

时间:2019-02-19 14:54:29

标签: c linux gcc system-calls

我有一个名为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。如果没有重定向器,效果很好。

1 个答案:

答案 0 :(得分:2)

我认为是由于缓冲区的原因,请尝试以下代码:

struct B{ 


    template<class T>
    void CallTemplateFun(void (T::*funPtr)(), T& instance){

        (instance.*funPtr)();
    }


};

template<typename T>
class A{

    T t;
    B b;

public:

    A(T v) : t(v){}

    void print(){ std::cout << t << std::endl  ; }
};

int main(
{

    A<int> ai(5);
    B b;
    b.CallTemplateFun(&A<int>::print, ai);


    A<float> af(3.1428f);
    b.CallTemplateFun(&A<float>::print, af);


    return 0;
}