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; }