vop_vector ― 2006年07月31日 14時27分19秒
ファイルシステムがマウントされると、そこに保存されているファイルやディレクトリ等が操作出来るようになる。UFS の場合は、/usr/src/sys/ufs/ufs_vnops.c にまとめられている。
/* Global vfs data structures for ufs. */
struct vop_vector ufs_vnodeops = {
.vop_default = &default_vnodeops,
.vop_fsync = VOP_PANIC,
.vop_read = VOP_PANIC,
.vop_reallocblks = VOP_PANIC,
.vop_write = VOP_PANIC,
.vop_access = ufs_access,
.vop_advlock = ufs_advlock,
.vop_bmap = ufs_bmap,
.vop_cachedlookup = ufs_lookup,
.vop_close = ufs_close,
.vop_create = ufs_create,
.vop_getattr = ufs_getattr,
.vop_inactive = ufs_inactive,
.vop_link = ufs_link,
.vop_lookup = vfs_cache_lookup,
...
実は、vop_vector をヘッダファイルの中を探したのだが見つからなかった。find -name '*.h' をやっていたのだが。不思議に思い、もう一度 find を試したところ見つかった。自動生成していたらしい。
/usr/src/sys/tools/vnode_if.awk が使われて、/usr/obj/usr/src/sys/GENERIC/vnode_if.h などと作られるらしい。さらに、vop_vector 自体は vnode_if_typedef.h の中で定義されている。
smbfs 用には /usr/src/sys/fs/smbfs_vnops.c に以下のように定義されている。
struct vop_vector smbfs_vnodeops = {
.vop_default = &default_vnodeops,
.vop_access = smbfs_access,
.vop_advlock = smbfs_advlock,
.vop_close = smbfs_close,
.vop_create = smbfs_create,
.vop_fsync = smbfs_fsync,
...
これらの関数を通して、ファイルやディレクトリにたどり着けるわけだ。
最近のコメント