UNIXシステムコール 標準出力が行緩衝であることを確認する

標準出力は改行が書き込まれるまで出力しない。これを行緩衝という。
下記のプログラムを実行すると、「54321 go!」という文字列が同時に表示される。
改行が書き込まれるまで出力は行われず、バッファに蓄積されるからである。

#include <stdio.h>
#include <unistd.h>

int main(void) {
  int i;

  for (i = 5; i > 0; i--) {
    printf("%d", i);
    sleep(1);
  }
  printf(" go!\n");
  return 0;
}

下記のように、「fflush(stdout);」を追加するとその都度画面に表示される。

#include <stdio.h>
#include <unistd.h>

int main(void) {
  int i;

  for (i = 5; i > 0; i--) {
    printf("%d", i);
    fflush(stdout);
    sleep(1);
  }
  printf(" go!\n");
  return 0;
}

標準エラー出力はその都度出力する。

#include <stdio.h>
#include <unistd.h>

int main(void) {
  int i;

  for (i = 5; i > 0; i--) {
    fprintf(stderr, "%d", i);
    sleep(1);
  }
  printf(" go!\n");
  return 0;
}