Linuxのパイプにデータを書き込むには、関数呼び出しfwrite()
を使用しています。fwrite()のバッファリング動作の理解
これまでのところ、小さなチャンクのデータ(平均20バイト)に対してはfwrite()
が呼び出され、バッファリングはfwrite()
のままでした。プロセス上のstraceは、一度に4096バイトのデータが書き込まれていることを示しました。
この書き込みプロセスが私のプログラムのボトルネックであることが判明しました。だから私はコード内のデータを64KBのブロックにバッファリングし、ブロック全体を一度にfwrite()
を使って書き込むことにしました。私はsetvbuf()
を使用して、FILE *ポインタを 'No Buffering'に設定しました。
パフォーマンスの向上は期待したほどではありませんでした。
さらに重要なことに、strace
の出力では、一度に4096バイトのデータがまだ書き込まれていました。誰かがこの行動を私に説明してもらえますか?私がfwrite()
に64KBのデータを呼び出すと、一度に4096バイトしか書き込まないのはなぜですか?
FILE *ポインタを使用してパイプにデータを書き込むためのfwrite()
の代替品はありますか?
コードを表示できますか? – tuxuday
@Shailesh_Tainwala:C++でコードを書くかもしれませんが、これはC++ではなくcです。 'fwrite()'はc関数であり、C++関数ではありません。私はあなたの質問にcタグを追加したので、より多くの聴衆を得ることができます。 –