25

Cプログラムからバイナリデータをstdoutに書き込む最良の方法を見つけようとしています。Linux では問題なく動作しますが、Windows でコンパイルすると問題が発生します。これは、"\n" が "\r\n" に変換されるためです。

改行変換を回避するある種のバイナリモードで stdout に書き込む標準的な方法はありますか? そうでない場合、Windows にこれを停止させる最も簡単な方法は何ですか?

私は GCC と MinGW をstdout使用しており、 fwrite.

4

2 に答える 2

9

あなたはそのようなことをすることができます(これは一種のクロスプラットフォームです):

FILE *const in = fdopen(dup(fileno(stdin)), "rb");
FILE *const out = fdopen(dup(fileno(stdout)), "wb");
/* ... */
fclose(in);
fclose(out);

write()または、 andread()システム コールをfileno(stdin)andで直接使用することもできますfileno(stdout)。これらのシステム コールは下位レベルで動作し、変換を行いません。FILEただし、ストリームから得られるバッファリングもありません。

于 2015-10-15T19:40:33.777 に答える