setvbuf

setvbufで、setbufより入出力バッファの詳細について設定できる。

C言語関数辞典 - setvbuf
setvbuf - cppreference.com
setvbuf | Programming Place Plus C言語編 標準ライブラリのリファレンス

/* ヘッダファイルのインクルード */
#include <stdio.h> /* 標準入出力 */
#include <unistd.h> /* UNIX標準 */

/* main関数の定義 */
int main(void){

  /* stdoutのバッファにNULLを指定. */
  setvbuf(stdout, NULL, _IOFBF, 8); /* setvbufにNULLを指定.(サイズ8, _IOFBFなのでバッファリングする.) */

  /* 1つ目の文字列を出力. */
  printf("ABCDE"); /* printfで"ABCDE"を出力. */

  /* 5秒スリープ */
  sleep(5); /* sleepで5秒待つ. */

  /* 2つ目の文字列を出力. */
  printf("FGHIJ"); /* printfで"FGHIJ"を出力. */

  /* プログラムの終了 */
  return 0; /* 0を返して正常終了. */

}

setbufのようにNULLを設定しても、_IOFBFなので、

出ない
出ない

出ない。

sleep抜けてから一気に出る
sleep抜けてから一気に出る

sleep抜けてから一気に出る。

_IONBFで、バッファリングしないになる。

ABCDE出てる
ABCDE出てる

ABCDE出てる。

最後はこうなる。
最後はこうなる。

最後はこうなる。。
結局のところ、バッファリングのmodeのところでいろいろ変わる。
この辺は、バッファリングモードの定数のところで扱う予定。

Sample/c/setvbuf/setvbuf/src/setvbuf at master · bg1bgst333/Sample · GitHub