2014-08-30 52 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()函數。

相關問題