問題タブ [fflush]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - stdinをフラッシュできません
stdinをフラッシュする方法??
次のコードスニペットで機能しないのはなぜですか?
ここで、入力を11文字として指定した場合、9文字のみを読み取る必要がありますが、stdinの残りの2文字はフラッシュされず、argqで再度読み取られます。なんで?
入力:123 456 789
出力:123 456 89
なぜこの89を出力として取得するのですか?
c - fflush と「ディスク容量が残っていません」
私はプログラム、ある種のデータベースを書いています。のマニュアルを読んでいるときに、バッファをディスクにフラッシュfclose(3)
するように呼び出していることがわかりました(実際には OS バッファですが、今は関係ありません。いつでも呼び出すことができます)。fflush(3)
FILE*
fsync(2)
私は DB を書いているので、データの損失を防ぎたいのは明らかです。ディスク容量がなく失敗fflush(3)
したfclose(3)
場合 — データが失われます。
FILE*
エラーの後に使用fclose()
すると、未定義の動作が発生します
fflush(3)
そこで、 beforeを明示的に使用することを考えfclose(3)
、ユーザーにディスク容量不足を警告fflush(3)
し、しばらくしてから思い出すようにしました。
私はC標準を読んで、これは良い考えだと思いました。実際には、失敗した後fflush
、2 番目の呼び出しは常に 0 (エラーなし) を返しますが、実際には何もしません。fsync
役に立ちませんでした(データはRAMに保存されるのではないかと思いました)。
このような状況でデータの損失を防ぐにはどうすればよいですか? たぶん、いくつかの経験則があります。
ここに私のテストコードがあります:
fflush - fflush と fsync の違い
fsync()
私はfflush()
内部的にそう思ったのでfsync()
、ストリームで使用しても問題ありません。しかし、ネットワーク I/O で実行すると予期しない結果が得られます。
私のコードスニペット:
しかし_commit()
、データをフラッシュしていないようです (私は Windows で試しましたが、データは Linux のエクスポートされたファイルシステムに書き込まれました)。
コードを次のように変更したとき:
データをフラッシュします。
_commit()
と同じことをするかどうか疑問に思っていfflush()
ます。入力はありますか?
c - fflush(stdin) の使用
そのため、入力バッファをクリアする方法を Google で簡単に検索するfflush(stdin)
と、その使用を警告する多数の Web サイトが表示されます。それでも、それはまさに私のコンピューターサイエンスの教授がクラスでそれを行うように教えた方法です.
を使用するのはどのくらい悪いですfflush(stdin)
か? 私の教授が使っていて、問題なく動作しているように見えても、本当に使うのを控えるべきでしょうか?
windows - システムがクラッシュしても「ほぼ完全な」ログを保持
Windows と UNIX で動作する C++ アプリケーション (コンソール) があります。このアプリケーションは、出力ファイルを使用して、システム コール/印刷/その他の詳細なログ ファイルを出力しました。問題は、新しい機能が追加された後に信号 11/2 を受け取る場合があることです。
シグナル 11 が発生したときに出力ファイルが適切に閉じられないため、これが発生するたびに、バグ/問題の原因を追跡するための「ほぼ完全な」情報がログ ファイルから取得されません。(部分的またはサイズがゼロです)
fprintf 行の出力ごとにフラッシュ コマンドを追加することを検討しました。Q:
- それは良い実践と見なされますか?
- fflush は Windows プラットフォームでうまく動作しますか?
- システムが予期せずクラッシュする可能性がある間、ログファイルを保持するための考え/その他の方法はありますか?
c - フラッシュとwhileループ
私はプログレスバーを作るためにフラッシュを使用しようとしています。フラッシュをテストするために、私は以下の小さなコードを書きました。
「sleep(1);」のコメントを外すと、想定どおりに機能します。ただし、コメントアウトされたままの場合は、予期しない方法で機能します。最初のダッシュを印刷し、残りの9つすべてを印刷するよりも待機して終了します。
なぜそれが違いを生むのか分かりません。
c - Cのfflush(stdout)
fflush(stdout) で GDB を中断したときに、実際に印刷する前に stdout に何があるかを知ることはできますか?
任意の時点で stdout に何があるかを知るにはどうすればよいですか?
c++ - seg fault が原因で fflush 時にプログラムがクラッシュしますが、常にではありませんか?
タイトルに記載されている状況について、どのような理由が考えられますか? これが私のbtの外観です:
そしてそれは私に与えますProgram terminated with signal 11, Segmentation fault.
fflush() のラッパーは単純で、何もせず、呼び出しfflash
てエラーをチェックするだけです (返されたコードが <0 の場合)。したがって、セグ フォールトの原因はfflash
. または??
、スタックの一番上にあるため、別の場所にいる可能性はありますか?
OS: RHEL5; gcc バージョン 3.4.6 20060404 (Red Hat 3.4.6-3); 最大デバッグ情報を含む元のexeを使用して、gdbでデバッグしました。
ディスクにスペースがない場合のセグフォルトについては知っていますが、これはそうではありません (アプリケーションのウォッチドッグがあり、プログラムを再起動すると、すべて正常に動作し続けます)。
どんなアイデアも役に立ちます。ありがとう。
編集
**注** コード全体を貼り付けることはできません。1 万以上のコードの一部です。また、これはリアルタイムシステムのさまざまなアプリケーションで何年も機能しています。このようなクラッシュは非常にまれで、年に 2 回程度です。したがって、これはコードの問題ではないと思います。誰もこの種のことで私を助けることができないことを私は知っています。そのため、私はアイデアを求めているだけです.fflushがセグフォールトを引き起こす理由.
printf - fprintf()引数としてfflush(stdout)を使用しても安全ですか?
私はこのコード行に出くわしました:
メッセージには%タグが含まれていないことに注意してください。
Visual C ++では安全ですか?fflush()は、成功した場合は0を返し、失敗した場合はEOFを返します。fprintf()はこの追加のパラメーターで何をしますか?
私は最初、これは余分な行を必要とせずにfflush()呼び出しを追加するための奇妙なハックだと思いました。しかし、このように書くと、fflush()呼び出しはfprintf()呼び出しの前に実行されるので、現在印刷されているメッセージはフラッシュされませんが、フラッシュされるのを待っているメッセージがあれば...私は正しいですか?
c - Visual C++ 2010 で fflush が失敗する
私はいくつかのコードを実行しようとしていますがfflush()
、エラーがあります:
コードの関連部分は次のとおりです。