读取系统调用给出错误的计数大小?

时间:2014-08-30 23:19:01

标签: linux-kernel linux-device-driver

我已经创建了一个misc驱动程序,并且像这样制作了一个示例读取函数

static ssize_t test_read(struct file *file, char __user *buffer,
        size_t count, loff_t *ppos)
{
    pr_info("Count arg : %d\n",count);

    return ret;
}

我现在尝试使用用户空间代码读取设备,如下所示

uint64_t read_buff;
fread(&read_buff, sizeof(read_buff), 1, fp)

我得到的dmesg日志是

[ 1593.273163] Count arg : 4096

我原以为它的大小为uint64_t。有人能指出我为什么会有意想不到的价值吗?

1 个答案:

答案 0 :(得分:3)

似乎fread()尝试为userland缓冲一些数据。我发现source code of one fread()缓冲了数据(在__srefill()中)。因此,fread()可以这样做。

如果您想避免出现这种意外结果,请降低一级,并在用户区使用read()功能。