it-mure.jp.net

cygwinとmingwを使用したI / Oリダイレクト

私はCでプログラムを作成し、MinGWを使用してコンパイルしました。 Cygwinでそのプログラムを実行しようとすると、正常に動作しているように見えます(つまり、正しい出力を出力するなど)

ただし、プログラムの出力から情報を解析できるように、出力をプログラムにパイプしようとしています。ただし、2番目のプログラムに入力がないため、配管が機能していないようです。

次のコマンドを使用してこれを確認しました。

このコマンドは正常に機能しているようです。

./prog 

このコマンドを実行しても何も返されません。

./prog | cat

このコマンドは、最初のものを検証します。

./prog | wc

どちらが返されますか:

0 0 0

スクリプト(プログラムからのパイプを含む)は、すべてのLinux環境で完全に正常に機能することを私は知っています。

Cygwinで配管が機能しない理由を誰かが知っていますか?ありがとう!

4
KLee1

コメントセクションで前に特定して説明したように、おそらくこれはstdioバッファリングに関係しています。私のMinGWプロジェクトでは、次の構成をよく使用しました。

#define disable_stdout_buffering()do {\ 
 setvbuf(stdout、NULL、_IONBF、0); } while(0)
 
 int main(int argc、char * argv []){
 disable_stdout_buffering(); 
/*コード*/
 exit(EXIT_SUCCESS); 
} 

もちろん、プリプロセッサマクロで、またはデータをstdoutに出力するときに、fflush()への呼び出しを追加することもできますが、この方法では、コンソールに書き込まれる各バッファに追加のライブラリ呼び出しは追加されません。

1
Moreaki