2016-07-26 22 views
-1

私は、コアダンプ処理のためのツールを開発しています。 sysctlを使用して、ツールの入力でコアダンプを取得するように設定しました。すべてうまく動作します。しかし今日、私はコアダンプが壊れている(私にはわからない)状況に直面した。通常のファイルをコアダンプとして設定すると、表示されません。だから何らかの理由で壊れていると思う。代わりに私のツールteeをセットアップすると結果は表示されません。入力(stdin)が壊れていることを確認するにはどうすればよいですか?

So.私はそのような状況を(それが可能な場合)決定し、壊れたファイルを生成するのではなくログに記録したい。

私は::read(STDIN_FILENO,buff, buffSize)を使用してデータを取得しています。そして最後にreadちょうど戻ります0。私は0がファイルの終わりを意味し、パイプが壊れていることを意味するときを示したい。プログラムのバグによって

+0

'read'呼び出しの結果を確認しましたか? –

+0

はい、私は最初のメッセージでそれについて書きました。結果はゼロです。 – denys

+0

"最後に返ってきたのは、' buff'が最後にゼロを持っていると不平を言うように聞こえました。次回は[MCVE]を制作してください。そうです、問題は何ですか?あなたが '0'を取得した場合、パイプは壊れています....何が欠けていますか? –

答えて

1

は間違って行くことができると間違っているかさえもし何かが間違っているものを検出するための信頼できる方法はありません。

はできるだけ早くプログラムは未定義の動作または類似の行使として、すべてベットがオフになっていると、あなたができる最善のは、いくつかの報告チャネルがまだ確実に動作希望です。 一般に、クラッシュ時に確実にプログラムの状態を取得するために、OSカーネルによって書き込まれたコア/ミニダンプを信頼できます。しかし、あなたのプログラムがスタックを壊してしまったり、他の恐ろしいことをした場合、それらのダンプから得られるスタックトレースは、まだ使えなくなる可能性があります。

+0

コアダンプの内容は気にしません。私は、コアダンプが汚れによって壊れていたことをユーザーに伝えたいだけです。このようなコアダンプは私のツールがなければただ欠けているだけです。ファイルが完成していないためです。しかし、私のツールは、入力を受け取るのを止めるとファイルを終了するだけです。そう。主な探求 - 入力が壊れたと判断できるか? – denys

+0

"入力が壊れたと判断することは可能ですか?" - 多くの場合、多分、たぶん。最も一般的な場合。いいえ。 –

0

あなたはすでに見つかっています:readは、0が返され、バイトが読み取られなかったことを示します。 STDINのようなストリームをブロックするには、バイトになるまで待つことになっています。これはエラー状態です。

「別のAPI」は必要ありません。あなたが使っているもののドキュメントを読むだけでいいです。

関連する問題