2014-08-30 5 views
0

Я создал драйвер 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 журнала я получаю is

[ 1593.273163] Count arg : 4096 

Я ожидал, что он будет иметь размер uint64_t. Может ли кто-нибудь указать мне, почему я получаю неожиданное значение?

ответ

3

Кажется, что fread() пытается загрузить некоторые данные для пользовательской области. Я нашел source code of one fread(), который буферизует данные (в __srefill()). Итак, это нормально для fread().

Если вы хотите избежать таких неожиданных результатов, опустите один уровень вниз и работайте с функцией read() в userland.

Смежные вопросы