1

我正在尝试在 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);

但是,没有数据被打印出来。我怀疑问题在于外部程序输出到wcoutand wclog,但我不知道如何处理它。我也尝试使用wstringand 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,因为我正在处理可能是任何语言的数据,包括中文等。

在此先感谢您提供任何线索!

4

1 回答 1

0

原来我正在覆盖一个外部程序用于输入的文件,所以它没有给出任何输出……</p>

尽管如此,将上述片段放在一个地方还是很不错的,因为破译 Boost 文档并不简单。

于 2010-04-08T12:03:33.310 回答