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