我已经创建了一个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。有人能指出我为什么会有意想不到的价值吗?
答案 0 :(得分:3)
似乎fread()
尝试为userland缓冲一些数据。我发现source code of one fread()
缓冲了数据(在__srefill()
中)。因此,fread()
可以这样做。
如果您想避免出现这种意外结果,请降低一级,并在用户区使用read()
功能。