c - vfs_stat() 调用有什么问题?

标签 c linux linux-kernel kernel stat

我正在尝试对文件进行统计,

    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);

__userdefined as :

# define __user __attribute__((noderef, address_space(1)))

换句话说,vfs_stat() 仅支持使用作为指向用户空间的指针的文件名,并且不应在内核空间内取消引用。请注意,"/bin/ls" 并不指向用户空间,而是指向内核空间,因此不能在此处使用。

实际上,错误消息 14(地址错误)直接告诉您这个问题:)

关于c - vfs_stat() 调用有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19195560/

相关文章:

c - 使用 C 对 bmp 文件进行游程编码时的平台相关问题

c - 警告 : command substitution: ignored null byte in input. 如何让 gdb 不忽略输入中的空字节?

linux - 为什么设置 O_NONBLOCK 时会阻塞读取?

ubuntu - 限制进程在其生命周期内可以打开的文件描述符的数量

c - Linux 内核 I/O

c - 多个互斥锁如何工作?

在同一进程中和两个进程之间将字符串从一个指针复制到另一个指针

linux - 如何通过Shell脚本利用并行节点?

python - 将参数从 shell 脚本传递到 Python 脚本,而无需在命令行上指定参数

linux - 在 Linux Mint 18.2 上安装 Yiynova 平板电脑的内核驱动程序时遇到问题