網(wǎng)站描述是什么濟(jì)南網(wǎng)站seo優(yōu)化
背景
linux字符設(shè)備的fops實(shí)現(xiàn)read write的時(shí)候,尤其是write,因?yàn)闀?huì)指定寫入的總長度,那么如果如果驅(qū)動(dòng)中單次write最大個(gè)數(shù)小于需求len的時(shí)候,文件系統(tǒng)就會(huì)多次調(diào)用到write。他是根據(jù)wirte函數(shù)的返回值來判斷的。如果返回值不是目標(biāo)len,就會(huì)不停地調(diào)用。這在撰寫驅(qū)動(dòng)中要特別注意。
舉例
static const struct file_operations umad_fops = {.owner = THIS_MODULE,.read = ib_umad_read,.write = ib_umad_write//...
};static ssize_t ib_umad_write(struct file *filp, const char __user *buf, size_t count, loff_t *pos)
{if (copy_from_user(&packet->mad, buf, hdr_size(file))) {ret = -EFAULT;goto err;}//...return count;//return count或者return 錯(cuò)誤都不會(huì)繼續(xù)調(diào)用,其他場景需要單獨(dú)處理。另外可以配合pos處理,該部分以后補(bǔ)充。
}