为什么使用 loff_t *offp 而不是直接 filp->f_pos 用法的原因

2023-12-03

以下函数取自LDD:

ssize_t read(struct file *filp, char __user *buff, size_t count, loff_t *offp);
ssize_t write(struct file *filp, const char __user *buff, size_t count, loff_t *offp);

为什么需要loff_t *offp?不能直接使用吗filp更新f_pos?

此外,作者在第 54 页中说道:

读取和写入应该使用它们收到的最后一个参数的指针来更新位置,而不是作用于filp->f_pos直接地。唯一的例外是……

好的,所以最好使用offp指针,但是为什么呢?


filp->f_pos是文件中的当前指针位置,而offp是用户访问文件的地方。在成功的读/写操作上前进文件指针,如果失败,则不应更改文件指针。内核自己做,如果你成功读/写它就会改变filp->f_pos to offp。引用LDD3:

无论方法传输多少数据量,它们都应该 一般更新*offp处的文件位置来表示当前 成功完成系统调用后的文件位置。这 然后内核将文件位置更改传播回文件中 适当时的结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 loff_t *offp 而不是直接 filp->f_pos 用法的原因 的相关文章

随机推荐

  • 如何使用 Spring Data JPA 规范创建自定义查询? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 在我的 Spring Boot 应用程序中 我使用 JPA 规范创建了自定义过滤 如上所述使用 JPA 规范搜索和过滤 Spring Boot 但是 我需要连接多个表并构建一个W
  • 如何修复此 SQL 插入语句中的语法错误?

    第一次在这里发布海报 我正在 VBA Access 数据库 中创建 SQL 插入语句 但当我最终准备好通过我创建的表单进行插入时 我不断收到语法错误 似乎无法弄清楚我在这个声明中出了什么问题 因为过去同样的格式对我有用 我在论坛上寻找已经回
  • MUI 依赖错误 npm install @mui/icons-material

    npm install mui icons material npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree npm ERR npm ERR
  • Typescript 无法推断函数对象的正确参数类型

    我写了一个更新函数 它接受一个对象 T 以及一个 更新程序 对象 它采用与以下相同的键 或子集 T并提供更新原对象对应值的函数 type UpdaterObj
  • 在空手道中使用 cURL 实现 API 自动化

    我是空手道新手 我正在自动化 API 测试 需要上传 gt 50MB 的大文件 当我用空手道这样做时 我收到错误 Broken Pipe 根据这个问题测试时管道损坏 写入失败 gt 允许的最大内容长度我可以使用 cURL 来执行此请求 它工
  • R中按虚部对复向量进行排序

    roots lt polyroot c 5 4 3 2 1 我想按虚部的升序对根进行排序 默认情况下sort函数按实部的升序对其进行排序 我已经阅读了文档 但我仍然不知道如何调整参数或编写命令 有人可以帮忙吗 Use Im函数提取虚部并对其
  • HTML5时间标签的使用

    我可以使用如下 HTML 时间标签吗
  • iPhone/iPad 上的自动对焦表单元素

    我正在尝试创建一个 Web 应用程序 在页面加载时自动将文本输入框聚焦 但是 我知道移动 Safari 不支持 自动对焦 属性 我需要它自动对焦的原因是因为我正在开发一个 Web 应用程序 可以这么说 它基本上要求用户使用蓝牙扫描仪将输入发
  • 如何将shellcode解码为ascii

    我有一些 shellcode 当我转换为 ascii 时 它不会输出文本 它只是乱码 x24 x11 xff xff x24 x04 x27 x0f x24 x02 x10 x46 x01 x01 x01 x0c x1e x20 xff x
  • 仅使用 Jackson 将超类字段序列化为 JSON

    我正在用 Jackson 序列化一个类的实例 仅序列化此实例的超类的字段的最佳方法是什么 目前我必须向子类中的每个方法添加 JSONIgnore 注释 有更好的方法吗 假设您可以直接通过以下方式控制序列化过程ObjectMapper 您可以
  • Delphi原型模式

    我想知道 Delphi 的 RTTI 中是否有任何东西可以像 C 中的 MemberwiseClone 一样简单地实现原型模式 我看到了这种模式的一些 Delphi 实现 其中正在创建一个新对象 TMyObject Create 并且它的属
  • 在 Metroapp 中显示存储在存储文件中的图片

    我想通过绑定显示存储在 StorageFile 中的图片内容 但无论我尝试做什么 它似乎都不起作用 这是我已经测试过的两个解决方案 string img await CompetencesFolder GetFileAsync Format
  • 使用 virtualenvwrapper-win 传递不同 python 版本时出错

    我安装了 python 3 4 和 2 7 它们的路径是 C python34 和 C python27 在尝试使用 python 2 7 创建 virtualenv 时 出现以下错误 C Development gt mkvirtuale
  • 在 iOS 应用程序中从 Firebase 获取发送推送通知的历史记录

    我有一个与 Firebase Cloud Messaging 集成的 iOS 应用程序 用于发送推送通知 我知道 Firebase 会保存所有发送通知的历史记录 有没有办法让运行应用程序的每个特定设备获取自己的已发送通知历史记录 我需要在客
  • 从 .txt 文件读取并执行 Shellcode

    从 C 总线测试 Shellcode 错误 10 上面是我之前的问题 涉及当 shell 代码位于源代码内部时 从 c 程序中执行 shellcode Carl Norum 解决了这个问题 原因是内存保护 我有一个不同的问题 但很相似 我不
  • 是否可以在 C 编译期间计算处理器值的阶乘值?

    define num 7 user can change this define size I want this value factorial of num to be computed during compile time int
  • 在 Compact Framework 中获取文件版本信息

    我有一些代码需要能够找到程序集的版本号 给定一个字符串说明它所在的位置 我无法让它工作 Assembly assembly Assembly LoadFrom Program Files Microsoft SQL Server Compa
  • solr - 将字段设置为默认搜索字段

    以下查询对我来说效果很好 http 8983 solr vault select q VersionComments 3AWhite 返回版本注释包含 White 的所有文档 我尝试省略字段名称并将其作为默认值 如下所示 在 solr 配置
  • 使用 java swing 对 JTabbedPane 中的选项卡进行着色

    我正在尝试更改选项卡的背景颜色JTabbedPane 我试过JTabbedPane setBackgroudAt 0 Color GRAY and JTabbedPane setBackgroud Color GRAY 前景也是如此 但什么
  • 为什么使用 loff_t *offp 而不是直接 filp->f_pos 用法的原因

    以下函数取自LDD ssize t read struct file filp char user buff size t count loff t offp ssize t write struct file filp const cha