我正在尝试对文件进行统计,
struct kstat stat;
int error = vfs_stat ("/bin/ls", &stat); // /bin/ls exists
if (error)
{
printk (KERN_INFO "error code %d\n", error);
}
else
{
printk (KERN_INFO "mode of ls: %o\n", stat.mode);
printk (KERN_INFO "owner of ls: %o\n", stat.uid);
}
return error;
但错误始终设置为 14
(错误地址),代码有什么问题?
我正在运行 3.9 内核。
最佳答案
vfs_stat()
是 defined as :
int vfs_stat(const char __user *name, struct kstat *stat);
和 __user
是 defined as :
# define __user __attribute__((noderef, address_space(1)))
换句话说,vfs_stat()
仅支持使用作为指向用户空间的指针的文件名,并且不应在内核空间内取消引用。请注意,"/bin/ls"
并不指向用户空间,而是指向内核空间,因此不能在此处使用。
实际上,错误消息 14(地址错误)直接告诉您这个问题:)
关于c - vfs_stat() 调用有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19195560/