1

Mac OS X SnowLeopardの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私は中国語などを含む任意の言語のデータを扱っているので、外部プログラムとパイプから読み取るプログラムの両方を使用する必要があります。

手がかりを事前に感謝します!

4

1 に答える 1

0

外部プログラムが入力に使用したファイルを上書きしていたことが判明したため、何も出力されませんでした…</p>

それでも、Boost のドキュメントを解読するのは簡単ではなかったので、上記のスニペットを 1 か所にまとめておくと便利です。

于 2010-04-08T12:03:33.310 に答える