Я пытаюсь использовать следующий код на C ++ в Mac OS X Snow Leopard для получения вывода внешней программы через канал.
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
и wclog
, но я не знаю, как с этим справиться.Я также пытался использовать wstring
и 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
, поскольку я имею дело с данными, которые могут быть на любом языке, включая китайский и т. Д.за любые подсказки!