[解決済み] C言語でのバッファのフラッシュ
質問
必要なもの
fflush()
は、たとえそれが出力ストリームであっても、バッファをフラッシュするために使用されないのですか?
何に使うのですか?一般的にバッファをフラッシュするにはどうすればよいのでしょうか?
どのように解決するのですか?
出力バッファをフラッシュする。
printf("Buffered, will be flushed");
fflush(stdout); // Prints to screen or whatever your standard out is
または
fprintf(fd, "Buffered, will be flushed");
fflush(fd); //Prints to a file
非常に有用なテクニックとなりえます。なぜ出力バッファをフラッシュしたいのでしょうか?通常、私がそれをするときは、コードがクラッシュして、何かをデバッグしようとしているときです。を呼び出すたびに標準バッファが印刷されるわけではありません。
printf()
満杯になるまで待って、一度に大量にダンプするのです。だから、もしクラッシュする前に関数呼び出しに成功しているかどうかをチェックしようとするなら、次のようにすると便利だ。
printf
といった感じで、クラッシュが起こる前にバッファがフラッシュされていないことがあり、本当にどこまで到達したのかわからなくなることがあります。
もうひとつ、マルチプロセスやマルチスレッドのコードで役立つことがあります。ここでも、バッファは常に
printf()
そのため、複数のプロセスの真の実行順序を知りたい場合は、printのたびにバッファをflushする必要があります。
私はこれを習慣にしています。デバッグの際に頭を悩ませることが少なくなりました。そうすることで思いつく唯一の欠点は
printf()
は高価な操作です(デフォルトでバッファをフラッシュしないのはそのためです)。
入力バッファのフラッシュに関しては、(
stdin
) は、やってはいけないことです。フラッシング
stdin
は、C11標準§7.21.5.2 part 2によると、未定義の動作です。
streamが出力ストリームを指している場合、fflush関数はそのストリームの未書き込みのデータをファイルに書き出しますが、それ以外の場合の動作は未定義です。
いくつかのシステムで、Linuxはその一つで
fflush()
定義された動作がありますが、システムに依存しているので、あなたのコードはポータブルではありません。
もし、入力バッファにゴミが残ってしまうのが心配なら
fpurge()
を追加しました。
参照
こちら
については
fflush()
と
fpurge()
関連
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言
-
[解決済み] 型付けされた関数ポインタ?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] unsigned charとは何ですか?
-
[解決済み] バッファとはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。