2014-08-30 31 views
0

我创建了一个其它驱动程序,并取得了样品读功能,这样读系统调用给出错误的计数大小?

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。有谁能指出我为什么会得到意想不到的价值?

回答

3

似乎fread()试图缓冲userland的一些数据。我发现source code of one fread()缓冲数据(在__srefill())。所以,fread()可以这样做。

如果你想避免这种意外的结果,请降低一级并使用userland中的read()函数。

相关问题