当前位置: 首页 > article >正文

微记录-Linux字符设备的write函数如何避免文件系统重复调用?

背景

linux字符设备的fops实现read write的时候,尤其是write,因为会指定写入的总长度,那么如果如果驱动中单次write最大个数小于需求len的时候,文件系统就会多次调用到write。他是根据wirte函数的返回值来判断的。如果返回值不是目标len,就会不停地调用。这在撰写驱动中要特别注意。

举例

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 错误都不会继续调用,其他场景需要单独处理。另外可以配合pos处理,该部分以后补充。
}

http://www.kler.cn/a/464149.html

相关文章:

  • 5大常见高并发限流算法选型浅析
  • 基于单片机的家庭智能垃圾桶(论文+源码)
  • 昆仑万维大数据面试题及参考答案
  • Spring Boot 中的 classpath详解
  • C++ 设计模式:备忘录模式(Memento Pattern)
  • 慧集通iPaaS集成平台低代码训练-实践篇
  • 级联配准learning
  • 详解广义表长度与深度计算方法
  • 【初识vue以及简单指令】
  • 本地调试自定义Maven Plugin步骤
  • 力学笃行(示例1)QGraphicsView显示相机图像
  • Java对象创建过程与类加载机制
  • 科技查新测试基础知识分享
  • REMARK-LLM:用于生成大型语言模型的稳健且高效的水印框架
  • 【无重复字符的最长子串】
  • C语言中的强弱符号
  • QT----------QT Data Visualzation
  • idea( 2022.3.2)打包报错总结
  • 电子病历四级视角下SQL语句的优化策略与实践用例研究
  • nmap探测网络基础服务
  • 探索Composable Architecture:小众但高效的现代框架技术
  • 简易CPU设计入门:本系统中的通用寄存器(五)
  • 数据防泄漏中我们应该着重关注哪些点呢?
  • Cypress测试框架详解:轻松实现端到端自动化测试!
  • driftingblues2
  • 从零用java实现 小红书 springboot vue uniapp (7)im 在线聊天功能 关注功能