バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFsのファイル上シミュレーションの話。
ディスクイメージを読み解く。
今回はファイルの内容を確認してみる。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
test.txtの内容のクラスタ位置

前回、確認したtest.txtの先頭クラスタ番号は3だった。
そして、ルートディレクトリエントリが配置されている先頭クラスタは2。

たしかにそうだったね。

ということは、ルートディレクトリエントリがあるクラスタ2のすぐ直後にあるってことか。
クラスタのサイズが4096[byte]で
ルートディレクトリエントリが0x90000[byte]の位置にあるから、
単純に0x90000[byte]に4096[byte]を足した、0x91000[byte]がクラスタ3ってことになって、
test.txtの内容が記載されてるってことか。

その通り。
test.txtの内容確認

じゃ、0x91000[byte]の位置に飛んで、
test.txtの内容を確認してみよう。


お!
ちゃんとFatFsで書き込んだ0x61=’a’が連続で埋まってるね!
指定した7000[byte]になってるし。

何となくファイルとファイルの中身の関係がわかった気がするよ。

さて、本当にそうなか?

(なんだ?この含みのある問いは・・・。)
クラスタ越えのファイルについて

今回の於いて1クラスタのサイズは4096[byte]。
クラスタは読み書き単位。
そして、test.txtは7000[byte]で1クラスタには収まっていない。

言われてみれば・・・。
1ファイルだから連続するような仕様になってるってこと?

たまたま、連続に配置できるようにクラスタが空いてたから連続になってるだけかもねー。

7000[byte]を書き込む際に連続した空きクラスタが無いとどうなるんだ???

まぁ答えを言ってしまうと
「FAT領域でクラスタチェーンを管理している」

以前もそんなこと言ってたね。
たしか、「ファイルサイズの伸縮を実現している」とかなんとか。

たしかここで言ってたと思う。

おー!
ちゃんと覚えていたか!

そう言ってたのを覚えていただけで、
なんのこと言ってるかはわからないけどねー。

というわけで次回はFAT領域のクラスタチェーンについて見てみよう。
まとめ

まとめだよ。
- test.txtの内容のクラスタ位置を確認。
- ファイルの中身を確認。
- 指定した7000[byte]のデータが並んでいたのを確認。
- しかし、7000[byte]が並んでいるのたまたま。クラスタの空き方によっては並ぶ保証は無い。
- FAT領域のクラスタチェーンでクラスタの関係性を表現している。
バックナンバーはこちら。
コメント