1


1

C ++:両方のプログラムでワイド文字列を使用すると、パイプを介してデータを取得できない

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」と「wclog」に出力するという事実にあるのではないかと疑っていますが、どのように対処するのかわかりません。 また、「wstring」と「fgetws」を使用してみましたが、それも助けにはなりませんでした。

  • boost :: iostreams *の使用について読みましたが、再び運がありませんでした。

FILE * al = popen("program program.cfg", "r");
boost::iostreams::file_descriptor_source alDesc(fileno(al));
boost::iostreams::stream_buffer alStream(alDesc);
istream align(&alStream);

string alignOutput;
while (align) {
    getline(align, alignOutput);
    cout << "«" << alignOutput << "»" << endl;
}
align >> alignOutput;
alStream.close();
alDesc.close();

pclose(al);

誰が実際の問題が何であり、どのように解決するかについての手がかりを持っていますか? 誰かが尋ねる場合に備えて、外部プログラムとパイプからの読み取りの両方で、中国語などを含むあらゆる言語のデータを扱うため、「wstring」を使用する必要があります。

手がかりを事前にありがとう!

1 Answer


0


外部プログラムが入力に使用したファイルを上書きしていたため、出力が得られなかったことが判明しました…

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