3

読み取りと書き込みの両方で、ファイルへのバッファリングされた IO を実行しています。fopen(), fseeko()標準の ANSI C ファイル I/O 関数を使用しています。いずれの場合も、ディスク上の標準のローカル ファイルに書き込みます。これらのファイル I/O 操作はどのくらいの頻度で失敗しますか? また、失敗に対する戦略はどのようなものでなければなりませんか? 私は正確に統計を探しているわけではありませんが、エラー状態を処理するためにどこまで行くべきかについての一般的な目的のステートメントを探しています。

たとえば、malloc()一部のユーザーのマシンでいつか失敗する可能性があり、おそらく失敗する可能性があり、開発者は返された NULL を確認する必要があることを誰もが認識していると思いますが、システムのメモリが不足していることを意味するため、優れた修復戦略はありません。少なくとも、これはmalloc()デスクトップ システムで採用されているアプローチのようですが、組み込みシステムは異なります。

同様に、ファイル I/O 操作を再試行する価値はありますか、それとも失敗は基本的に回復不可能であると考えるべきでしょうか。

適切な使用法を示すいくつかのコード サンプル、またはこれがどのように処理されるかを示すライブラリ ガイド リファレンスをいただければ幸いです。もちろん、その他のデータも大歓迎です。

4

2 に答える 2

1

ここでは初心者のプログラマーだと思います。ここでのアドバイスはすべての状況に当てはまるわけではありませんが、確実なコードを書くのに役立ちます。

  • エラーがどのように発生し、それが何を意味するかについて非常に確固たるモデルがない限り、エラーから回復する方法を理解しようとするのは困難です。
  • したがって、エラーとは何か、それが何を意味するのかを正確に理解していない限り、エラーを報告してくださいstderr
  • 最初のことがうまくいかないとすぐに爆破すると、エラーを理解し、コードを修正することを余儀なくされます。これにより、直感的にそうではないと示唆されたとしても、長期的にはより高品質のコードにつながります。
  • 一部の関数は、重大な障害を示さない「エラー」を返します。POSIXでは、EINTRシグナル処理を実装しやすくするためのハックとしてあり、シグナルを気にするシングルスレッドプログラムの特定のアーキテクチャを実装しやすくするという副作用があります。I/O 関数が を返すEAGAIN場合、それはファイルがノンブロッキング モードで開かれていて、I/O がブロックされることを意味します。これらのことを正しく処理する必要があります。
  • いくつかのエラーは、何かひどいことが起こったことを示しています。EIOPOSIXでは、関数が話す方法さえ知らない何かがうまくいかなかったことを意味します。
  • ファイル システム コードを操作すると、ファイルへの同時更新によっていくつかのエラーが発生する可能性があることがわかります。この種のものから「優雅に」「回復」しようとするのは愚かな用事です。しようとしないでください。
于 2013-11-03T21:53:06.390 に答える