我找到了此链接(http://www.spinics.net/lists/newbies/msg41016.html),并一直在考虑这样做.所以我在内核模块中编写了代码:
#include
#include
#include
struct path p;
struct kstat ks;
kern_path(filepath, 0, &p);
vfs_getattr(&p, &ks);
printk(KERN_INFO "size: %lld
", ks.size);
不会编译的原因是:
/root/kernelmodule/hello.c:15: warning: passing argument 1 of ‘vfs_getattr’ from incompatible pointer type
include/linux/fs.h:2563: note: expected ‘struct vfsmount *’ but argument is of type ‘struct path *’
/root/kernelmodule/hello.c:15: warning: passing argument 2 of ‘vfs_getattr’ from incompatible pointer type
include/linux/fs.h:2563: note: expected ‘struct dentry *’ but argument is of type ‘struct kstat *’
/root/kernelmodule/hello.c:15: error: too few arguments to function ‘vfs_getattr’
现在我在/linux/fs.h中看到vfs_getattr的原型是:
extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
有人可以帮助我实施吗?我正在阅读vfsmount和dentry,但仍然迷路.