我想要(运行Linux,CentOS 6的)的计算机集群上运行下面的简单的C++程序,以产生输出。C++程序失败重定向标准输出时到一个文件在Linux
#include <iostream>
#include <fstream>
int main(int argc, char *argv[]) {
std::ofstream file;
file.open("/dev/stdout");
file << "Hello, world\n";
file.close();
return 0;
}
当我编译(使用g++ test.cpp
),然后运行它作为我希望我是否让输出去重定向到一个文件的终端头节点上的程序。也就是说,
$ ./a.out > myfile.txt
产生包含行“你好,世界”(我使用bash)的文件myfile.txt
。如果我在任何执行节点上运行它并让输出进入终端,它就可以正常工作;但是,如果我尝试将输出重定向到文件,则文件始终为空。
我知道,这是不是“标准”的方式一会C++编写一个Hello World程序。我实际上遇到了第三方程序的困难,该程序试图使用需要文件名的库将二进制数据写入标准输出。在试图减少发布的代码时,我发现以上是最简单的代码,它可以再现我在较大程序中看到的问题。
我不是一个C++程序员的经验,所以不知道上面的例子应该或不应该工作,但事实上,它在一些计算机上工作,因为我期望但不是别人让我难倒。我也不确定这是否与C++代码,bash或系统配置有关。我询问过的人似乎已经同样困惑,甚至无法建议从哪里开始寻找。
我在其他语言创建简单的Hello World程序,并如期执行节点上的所有这些工作,所以我认为这是专门针对C++的东西。
任何人都可以向我解释,或者帮助我确定为什么我在运行相同操作系统的机器上观察到不同的行为(并且应该配置相同),并且在C++中有一种(首选)获得需要文件名写入标准输出的库函数?
你为什么要写stdin而不是stdout? – keshlam
假设你使用'stdout'并且它实际上在头节点上工作 - 问题可能是你的集群没有集群安全的'stdout';它是什么样的群集? –
@Keshlam闻起来像一个X和Y的问题。 – 2014-02-10 01:24:29