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

微记录-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.lryc.cn/news/514104.html

相关文章:

  • 本地调试自定义Maven Plugin步骤
  • 二、github基础
  • 如何在 Vue 2 中使用 Swiper 5.4.5 处理静态与后端数据不能切换问题
  • request.getSession().getAttribute(Constants.ADMIN_ID)
  • 线性回归模型的构建与训练
  • 【JavaWeb后端学习笔记】MySQL的常用函数(字符串函数,数值函数,日期函数,流程函数)
  • 【推送】主流的服务端推送技术的对比
  • 直观解读 JuiceFS 的数据和元数据设计(一)
  • nginx配置文件没有语法颜色
  • PCB层叠结构设计
  • 电子应用设计方案83:智能 AI 打印机系统设计
  • windows安装rsync Shell语句使用rsync
  • Django 模型
  • CentOS — 压缩解压
  • OpenGL变换矩阵和输入控制
  • LCS最长公共子序列C++实现
  • 深入刨析数据结构之排序(上)
  • 【无重复字符的最长子串】
  • Vue3+Element Plus的表格分页实战
  • vue项目搭建规范
  • Mac iTerm2集成DeepSeek AI
  • 检索增强生成(RAG)
  • 【第二部分--Python之基础】03 容器类型的数据
  • 【人工智能机器学习基础篇】——深入详解深度学习之复杂网络结构:卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)等概念及原理
  • MySQL 入门教程
  • 【sql】CAST(GROUP_CONCAT())实现一对多对象json输出
  • QT:控件属性及常用控件(1)------核心控件及属性
  • 使用 Python结合ffmpeg 实现单线程和多线程推流
  • Linux一些问题
  • 在 Ubuntu 24.04.1 LTS | Python 3.12 环境下部署 Crypto 库