LinuxのFSモジュールを書いてみる

Fuseとか使えばまああっさりな話なんだけど、実際どう動くのかを知りたかったので書いてみた。もちろんFuseのソースは参考にしていない。それにしても本当に資料がないんだよなあ。結局ソース読み込んだ。

というわけであんまりお作法的なものはよく分からないので、識者の方、ぜひとも突っ込んでくださいまし (use strict 使ってないとか register_globals=on になってるとかはなしで)。

下の .c ファイル (my_vfs_module.c) を 上の Makefile でビルドしてやると my_vfs.ko ができるので、それを

$ insmod my_vfs.ko

などとしてカーネル空間にぶち込む。

で、

$ mount -t my_vfs / /mnt/aho

とすると /mnt/aho に my_vfs がマウントされ、

$ ls -l /mnt/aho
合計 0
-rw-r--r-- 1 root root 39 2009-04-28 03:53 a
-rw-r--r-- 1 root root 39 2009-04-28 03:48 b
-rw-r--r-- 1 root root 39 2009-04-28 03:47 c
-rw-r--r-- 1 root root 39 2009-04-28 03:30 d
-rw-r--r-- 1 root root 39 2009-04-28 02:51 e

のようにファイルの一覧が見れ、cat で

$ cat /mnt/aho/a
quick brown fox jumps over the lazy dog

のように、ファイルの中身が読めることが確認できるはず。

ソースはこちら:
https://gist.github.com/102366/f4a923e4ba2b793bfb2bf5c7342de074312658d4