我想要(運行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