2

たとえば、既存のファイルがあるとします<File>。このファイルは更新のために C プログラムによって開かれています ( r+b)。の端ではなく、fseek内のポイントに移動するために使用します。<File>を使用してデータの書き込みを開始しfwrite/fputcます。以前に存在していたデータは削除されないことに注意してください<File>...

システムはこれらの書き込みをどのように処理しますか? ファイル全体を Disk 内の別の位置に書き換えて、新しいデータを含めますか? ファイルを断片化し、新しいデータのみを別の位置に書き込みますか(途中に空き領域があることを覚えておいてください)? 変更された部分だけを実際に上書きしますか?

質問には十分な理由があります。最初のケースでは、ファイルを継続的に更新すると、システムが遅くなる可能性があります。2 番目のケースでは、高速になる可能性がありますが、多くのファイルに対して実行すると、ファイル システムが台無しになります。3 番目のケース、特にソリッド ステート ディスクを使用している場合、ファイルの同じ場所を何度も更新すると、ディスクのその部分が役に立たなくなる可能性があります。

実は、私の質問はここからです。ディスク セクターを過剰使用から守るために、ソリッド ステート ディスクは、さまざまな手法を使用してデータを使用頻度の低いセクターに移動することを読みました。stdioしかし、関数はそのような状況をどのように正確に処理するのでしょうか?

お時間をいただきありがとうございます。:D

4

2 に答える 2

1

fileystem ハンドラーは、ディスク上のセクターへの一種の辞書書き込みを作成するため、ファイルのコンテンツを更新すると、ファイルシステムはディスク上の辞書を検索し、ファイル データがディスク上のどのセクターにあるかを通知します。 . 次に、スピン (またはディスクが到着するまで待機) し、ディスク上の適切なセクターを更新します。

それがショートバージョンです。

そのため、ファイルを更新する場合、通常、ファイルは新しい場所に移動されません。ファイルに新しいデータを追加して書き込むと、データが既存のセクターに収まらない場合、追加のセクターが割り当てられ、データがそこに書き込まれます。

ファイルを削除すると、通常、セクターは空きとしてマークされ、再利用されます。そのため、新しいファイルを開いて書き直した場合にのみ、ファイルが以前とは異なるセクターに配置される可能性があります。

ただし、詳細はハードウェアによって異なります。私の知る限り、CD 上のデータを上書きすると、データは (セッションがファイナライズされていない限り) 新しく書き込まれます。

于 2013-08-08T16:33:58.313 に答える
0

あなたの理解は間違っています: 「以前にファイルに存在していたデータは削除されないことに注意してください」

ファイルの途中までシークして書き込みを開始すると、以前にその位置にあったものはすべて上書きされます。

これが内部でどのように行われるかは、おそらくハードディスク内のコンピューターがそれをどのように実装するかによって異なります。ハードディスクの外では見えないはずであり、問​​題にはなりません。

于 2013-08-08T16:39:01.327 に答える