5

基本的に、ディスク上にあるものを表示したり、ネイティブファイルシステムとの間でファイルをファイルシステムにコピーしたりするなどの非常に単純な操作を実装するユーザー空間ファイルシステムとして機能するプログラムを実装する必要があります(単一のファイルに含まれています) "disk01" と呼ばれる) を実行し、ファイル システムからファイルを削除します。

私は基本的に、自分の「ディスク」を作成してその中に他のファイルを入れる方法がわからないので、どこから始めればよいかについての出発点またはヒントを探しています。これは宿題です。

何らかの方向性を探しているC++の学生です。

編集:

これは、いくつかの異なる場所で「VFS」または仮想ファイル システムとして、zip ファイルのようなものとして既に使用されている概念であることを私は知っています (コンテンツは、zip ファイルを処理できるプログラムを介してのみ表示できます)。私は基本的に、zip や winrar などに似た独自のプログラムを作成しようとしていますが、それほど複雑で機能が豊富ではありません。

これまでのご提案ありがとうございます。皆様大変お世話になりました!

4

2 に答える 2

2

非破壊読み取り/書き込み用にファイルを開きます。fstream の場合、これはfstream stream(filename).

次に、シーク関数を使用して移動します。C++ fstream を使用している場合、これはstream.seekg(position).

次に、バイナリの読み取りおよび書き込み関数が必要になるため、 and を使用stream.read(buffer, len)stream.write(buffer, len)ます。

ファイルシステムを開始する簡単な方法は、ブロック サイズを決定することです。昔はほとんどの人が 512 バイトを使用していました。それを行うか、4K を使用するか、完全に調整可能にすることができます。次に、フリー スペース マップの開始近くにブロックを確保します。これは、ブロックごとにビットにすることも、怠惰な場合はブロックごとに 1 バイトにすることもできます。その後、ルートディレクトリがあります。FAT はこれを簡単な方法で行いました。名前のリスト、タイムスタンプ、ファイル サイズ、ブロック オフセットなどのメタ データです。FAT ブロックにはファイル内の次のブロックへのポインターがあったため、書き込み中にデフラグを実行する必要なくファイルを断片化できたと思います。

次に、ディレクトリを検索してファイルを見つけ、オフセットに移動してブロックを読み取ります。

実際のファイルシステムが複雑になるのは、ファイルにブロックを割り当てるなどの難しいタスクであり、スペースを無駄にすることなく最後に拡張する余地があります。断片化の処理。複数のスレッドまたはプログラムが同時に書き込みを行っているときに、優れたパフォーマンスを発揮する。予期しないディスク エラーや停電に直面した場合の堅牢な回復。

于 2012-11-21T07:41:57.847 に答える