C++:在两个程序中使用宽字符串时无法通过管道获取数据

标签 c++ pipe wstring

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

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

提前感谢您提供任何线索!

最佳答案

原来是我覆盖了外部程序用于输入的文件,所以它没有给出任何输出......

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

关于C++:在两个程序中使用宽字符串时无法通过管道获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598401/

相关文章:

c - C 中的文件描述符和管道

c++ - RapidJSON:用汉字写字符串

c++ - 在 googlemocks EXPECT_CALL 中匹配 std::wstring

c++ - 使用 wstring 获取行读取文件

c++ - 基本形状识别 (openCV C++)

c++ - 在一个文件中制作函数,将两个 3 乘 3 矩阵相乘,但它发现第一行正确然后错误

linux - 管道读取处理

c++ - 在 lambda 中捕获命名空间变量

c++ - union 结构有什么作用?

angular - 使用简单的管道限制为小数点后两位