UNIXのファイルシステムの簡易版をc言語で作成しようと思ったのですが、
調べていた所、一つのFILEがスーパーブロック、inodeブロック、データブロックなどに分けられているのは理解できました。
が、しかし、そのスーパーブロックなどの構造体はどのようにしてデータブロックなどと一緒にディスクに確保されたのかが、分かりません。。。
たとえば、
creat で データサイズ+inodeブロックサイズ(構造体) + スーパーブロックサイズ(構造体)で個々のブロックのサイズ分のディスクを確保したのはいいのですが、 スーパーブロックなどの構造体をどのように確保したブロックに割り当てアクセスするのがわかりません。
どうかよろしくお願いします。
Unix ファイルシステムについて
Re: Unix ファイルシステムについて
「どのように」というのは、具体的にはデータ構造(構造体の構造)を聞いているのでしょうか?
だとすると、お手本にしたいUNIXのソースコードを入手して調べる、という感じになると思います。
または、「どのように」というのは、どうやってデータ構造をファイルに書きだすのか、という質問のようにも取れます。
その場合はwriteを使えば良いと思います。
だとすると、お手本にしたいUNIXのソースコードを入手して調べる、という感じになると思います。
または、「どのように」というのは、どうやってデータ構造をファイルに書きだすのか、という質問のようにも取れます。
その場合はwriteを使えば良いと思います。
-
心はいつもHelloWorld
Re: Unix ファイルシステムについて
返信ありがとうございます。
質問が分かりづらく申し訳ありません。
問題はどうやってデータ構造をファイルに書きだすのか、の方です。
beatleさんの助言どうりwriteを使用するとして、
構造体をbufferに格納し書きたいブロックに書き込む。
その書き込んだ構造体に int num; があったとします。
このintに数値を与えたい場合(例えば、num = 5 )は、read、lseekで構造体があるブロックを再びbuffer読み込む.
この時、上記(num = 5 の状態)の用にするにはどうすればよろしいのでしょうか。
考えたのは、再び構造体を作成し数値を与え、上書きする様に同じブロックに書き込む方法ですが、この方法だとあまり効率がよくないので迷っている所です。
質問が分かりづらく申し訳ありません。
問題はどうやってデータ構造をファイルに書きだすのか、の方です。
beatleさんの助言どうりwriteを使用するとして、
構造体をbufferに格納し書きたいブロックに書き込む。
その書き込んだ構造体に int num; があったとします。
このintに数値を与えたい場合(例えば、num = 5 )は、read、lseekで構造体があるブロックを再びbuffer読み込む.
この時、上記(num = 5 の状態)の用にするにはどうすればよろしいのでしょうか。
考えたのは、再び構造体を作成し数値を与え、上書きする様に同じブロックに書き込む方法ですが、この方法だとあまり効率がよくないので迷っている所です。
-
心はいつもHelloWorld
Re: Unix ファイルシステムについて
なるほど、無理にバッファーに入れる必要なかったのですね。
試してみた所うまくできました。
beatleさん、どうもありがとうございました。
試してみた所うまくできました。
beatleさん、どうもありがとうございました。