我正在尝试在 Mac OS X Snow Leopard 上使用 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);
但是,没有数据被打印出来。我怀疑问题在于外部程序输出到wcout
and wclog
,但我不知道如何处理它。我也尝试使用wstring
and fgetws
,但这也没有帮助。
我阅读了有关使用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
,因为我正在处理可能是任何语言的数据,包括中文等。
在此先感谢您提供任何线索!