忍者ブログ
日々の研究生活のメモ書きなど
なんか自分の書いたコードが思っているのと違う挙動をしていてちょっと困った・・・・

fprintf(stdout, "hoge ");
みたいな感じで改行を挟まずにループを何個も回して、最後に
fprintf(stdout, "\n");
と改行を入れるコード

実際に動かしてみると、待ってもhogeが表示されない・・・
しかし計算はどんどん進んでいっていることがstderrの情報からはわかる
stdoutは内部に出力バッファを持っていて、printfやfprintfでは改行文字を出力するか出力バッファが一杯になるまで溜め込みます。
改行文字がなくても強制的に吐き出させるのが fflush です。
■ 参考 : fflush(stdout)の意味

とのことらしい
なるほどね・・・
fprintfは、\nが来るまで実際に画面表示がされないというのは今回初めて知った・・・・

今回のコードでstderrは毎回\nが入っていたので、その都度表示されていたのも納得がいった
なおかつ、stderrとstdoutはバッファが違うから、今回のようなことになったんだろうなぁ〜














PR
この記事にコメントする
Name
Title
Color
E-Mail
URL
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

#ifdef RICH_FLAG
// ↑いつも支援いただきありがとうございます m(_ _)m
#define WISH_LIST
amazonのほしい物リスト
#endif


int main(void){

printf("\n");
printf("あけましておめでとうございます\n");
printf("今年もどうぞよろしくお願いします\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中\\
少し追記しました\n");
/* 最終更新 2018/01/01 */
return 0;

}
カウンター
ブログ内検索
ツイートするボタン
Flickr

Template "simple02" by Emile*Emilie
忍者ブログ [PR]