2010-04-08 29 views
1

我試圖在Mac OS X Snow Leopard上使用C++中的以下代碼來通過管道獲取外部程序的輸出。C++:在兩個程序中使用寬字符串時未能通過管道獲取數據

FILE * al = popen("program program.cfg", "r"); 

string data; 
char buffer[100]; 
while (fgets(buffer, 100, al) != NULL) 
data.append(buffer); 
cout << "«" << data << "»" << endl; 

pclose(al); 

但是,沒有數據被打印出來。我懷疑問題在於外部程序輸出到wcoutwclog,但我不知道如何處理它。我也嘗試使用wstringfgetws,但這也沒有幫助。

我讀到關於使用的boost :: iostreams的,再沒有運氣:

FILE * al = popen("program program.cfg", "r"); 
boost::iostreams::file_descriptor_source alDesc(fileno(al)); 
boost::iostreams::stream_buffer<boost::iostreams::file_descriptor_source> alStream(alDesc); 
istream align(&alStream); 

string alignOutput; 
while (align) { 
    getline(align, alignOutput); 
    cout << "«" << alignOutput << "»" << endl; 
} 
align >> alignOutput; 
alStream.close(); 
alDesc.close(); 

pclose(al); 

有沒有人有一個線索,以什麼實際的問題可能是如何解決的呢?如果有人可能會問,外部程序和從管道讀取的數據需要使用wstring,因爲我處理的數據可能是任何語言,包括中文等。

在此先感謝您的任何線索!

回答

0

原來我是覆蓋文件用於輸入外部程序,所以它沒有給出任何輸出...

不過,這是不錯的上述片斷在一個地方,因爲它是不直接解讀Boost文檔。

相關問題