マクロにBUFSIZというものがあったのだが、なんだろうか?
stdio.hに入っていることは分かったのだが・・・。
これは、ファイルが使用するI/Oバッファサイズに関係するようだ。
Man page of SETBUF
setbuf()がBUFSIZを使い、setbuffer()はそのサイズ指定可能版ということか。
printfさせると、BUFSIZは8192だった。
環境や時代で変わる値だと思うが、8KBまではバッファリングされることになる。
Man pageの説明を読むと、意識していないことが書かれていた。
- バッファリングの種類は3種類ある
- unbuffered
- 出力をすぐ書込む
- block buffered
- 文字の読み書きはブロック単位で行われる
- 吐き出すにはfflushなどを使う
- line buffered
- 新しい行が出力されるか、新しい行が入力されるまでためられる
- ファイルはすべてblock buffered
- 初めて入出力するときにmallocが呼ばれる
- stderrはunbuffered
printf()とfprintf(stderr)を混ぜていると、出力されるタイミングが違うなあ、と思っていたのだ。
出力先が違うからだと思っていたが、バッファリングの種類が違っていたからなのか。
引数がFILE*だから、システムコールレベルではなく、stdioとしてサポートしていることになるのだな。
open()した場合は、OSの動作を見ておかねばなるまい。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。