Unix ファイルシステムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
心はいつもHelloWorld

Unix ファイルシステムについて

#1

投稿記事 by 心はいつもHelloWorld » 14年前

UNIXのファイルシステムの簡易版をc言語で作成しようと思ったのですが、
調べていた所、一つのFILEがスーパーブロック、inodeブロック、データブロックなどに分けられているのは理解できました。
が、しかし、そのスーパーブロックなどの構造体はどのようにしてデータブロックなどと一緒にディスクに確保されたのかが、分かりません。。。

たとえば、
creat で データサイズ+inodeブロックサイズ(構造体) + スーパーブロックサイズ(構造体)で個々のブロックのサイズ分のディスクを確保したのはいいのですが、 スーパーブロックなどの構造体をどのように確保したブロックに割り当てアクセスするのがわかりません。

どうかよろしくお願いします。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: Unix ファイルシステムについて

#2

投稿記事 by beatle » 14年前

「どのように」というのは、具体的にはデータ構造(構造体の構造)を聞いているのでしょうか?
だとすると、お手本にしたいUNIXのソースコードを入手して調べる、という感じになると思います。

または、「どのように」というのは、どうやってデータ構造をファイルに書きだすのか、という質問のようにも取れます。
その場合はwriteを使えば良いと思います。

心はいつもHelloWorld

Re: Unix ファイルシステムについて

#3

投稿記事 by 心はいつもHelloWorld » 14年前

返信ありがとうございます。
質問が分かりづらく申し訳ありません。

問題はどうやってデータ構造をファイルに書きだすのか、の方です。

beatleさんの助言どうりwriteを使用するとして、

構造体をbufferに格納し書きたいブロックに書き込む。
その書き込んだ構造体に int num; があったとします。
このintに数値を与えたい場合(例えば、num = 5 )は、read、lseekで構造体があるブロックを再びbuffer読み込む.
この時、上記(num = 5 の状態)の用にするにはどうすればよろしいのでしょうか。

考えたのは、再び構造体を作成し数値を与え、上書きする様に同じブロックに書き込む方法ですが、この方法だとあまり効率がよくないので迷っている所です。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: Unix ファイルシステムについて

#4

投稿記事 by beatle » 14年前

書き込み時と読み込み時にエンディアンが違う可能性を考えなければ簡単です。
struct Hoge hoge;
という構造体(中身の構造はどうでもいい)を読み書きする場合

コード:

write(fd, (const void*)&hoge, sizeof(struct Hoge));
read(fd, (void*)&hoge, sizeof(struct Hoge));
のようにすれば出来ると思いますよ。

心はいつもHelloWorld

Re: Unix ファイルシステムについて

#5

投稿記事 by 心はいつもHelloWorld » 14年前

なるほど、無理にバッファーに入れる必要なかったのですね。

試してみた所うまくできました。
beatleさん、どうもありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る