内核模块与用户空间程序通信的最佳方式是什么?

2023-12-30

这个问题看起来很简单,但我想发送一个事件来通知我的用户空间程序模块缓冲区已准备好读取。

例如,我的内核模块中有一个缓冲区,其数据将由用户空间程序消耗。如果所有数据都被消耗,内核模块必须在新数据到达时通知我的程序。

这是生产者/消费者的典型问题。生产者是内核模块,消费者是用户空间程序。

今天,我向程序(事件)发送信号并使用 ioctl 函数访问数据缓冲区。但我不知道这种方法是否足以解决此类问题。我担心不必要地使用网络链接或内存映射来解决这个问题。


阅读其他一些可以实现您想要的功能的模块。

对于如何在 Linux 内核中执行此操作有很多选项,包括:

  • 虚拟文件系统,例如/proc、/sys、configfs、relayfs(真正看relayfs)
  • netlink
  • 阻塞系统调用
  • poll() / epoll() 及相关

/proc 可能是最容易开始的,因为它一直存在,并且有大量关于如何使用它的文档。创建一个映射到缓冲区的虚拟文件,然后让用户空间应用程序打开一个 fd 并使用 select。简单且无处不在。有更现代和“更好”的方法 - 它们将不可避免地用 /proc + select() 来描述,因此首先学习这些方法会教你一些有用的东西。

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

内核模块与用户空间程序通信的最佳方式是什么? 的相关文章

随机推荐

  • 节点包 (Grunt) 已安装但不可用

    我正在尝试建立一个github jquery ui 库 https github com jquery jquery ui using grunt 但是运行后npm install我仍然无法按照以下命令运行命令自述文件 https gith
  • 在 Java 上提取形状特征的傅里叶变换和傅里叶描述符

    我正在尝试构建一个简单的系统来使用傅立叶描述符识别简单的形状 我在我的程序中使用快速傅立叶变换的实现 链接如下 http www wikijava org wiki The Fast Fourier Transform in Java 28
  • 如何通过现有对象上的表达式树调用构造函数?

    我试图为已经存在的对象调用反序列化构造函数 如何使用表达式树做到这一点 I tried Create an uninitialized object T graph T FormatterServices GetUninitializedO
  • 为什么我的卸载方法没有被调用?

    我的 VS 2008 创建的安装程序不调用覆盖Uninstall我的安装程序类中的方法 为什么 这Install方法被调用 我的安装程序类如下所示 RunInstaller true public partial class Install
  • Android 版 Firefox 中 onload 事件期间 window.innerWidth 的值错误?

    好的 我面临的问题是 我的移动 Firefox 浏览器无法检索正确的值window innerWidth document documentElement clientWidth 或者甚至是a的宽度div样式设置为在页面加载后占据整个客户端
  • Bash 命令行参数,替换变量的默认值

    我有一个脚本 其中有多个输入文件 通常这些文件是存储在标准位置并由脚本调用的默认值 但是 有时需要使用更改的输入来运行它 在脚本中 我当前有三个变量 A B 和 C 现在我想用非默认的 B 运行它 明天我可能想用非默认的 A 和 B 运行它
  • 在 VS2012 中发布构建事件..运行批处理文件

    我正在尝试在 Visual Studio 中的构建后事件中运行批处理文件 推荐我们可以在 Visual Studio 中的构建后事件命令行中执行 bat 文件吗 https stackoverflow com questions 14913
  • FBAudience Network 作为框架集成

    我正在将 Facebook Audience Network 集成到插页式和奖励类型的广告中 我正在尝试将其集成为框架而不是项目中 当我尝试通过测试用例测试它时 它在这一行之后失败 self fbInterstitialAd FBInter
  • Python中N-Gram、tf-idf和Cosine相似度的简单实现

    我需要比较存储在数据库中的文档并得出 0 到 1 之间的相似度分数 我需要使用的方法必须非常简单 实现普通版本的 n gram 可以定义使用多少克 以及 tf idf 和余弦相似度的简单实现 有什么程序可以做到这一点吗 或者我应该从头开始写
  • DrawUserPrimitives无效操作异常

    我试图在 XNA 中使用以下代码绘制一个三角形 VertexPositionColor vertices new VertexPositionColor 3 vertices 0 Position new Vector3 0 5f 0 5f
  • 动画 UIView 过渡,例如将点扩展为圆圈

    在我的 iPhone 应用程序中 我需要实现不同类型的转换 那是 从当前视图打开下一个视图 它像一个点 并且点像一个圆圈一样慢慢扩大 在圆圈中下一个视图将部分显示 最后圆圈完全扩大 下一个视图完全显示 我搜索了很多像 CATransitio
  • 插入sql数据库时处理大量数据

    在我的代码中 用户可以上传一个 Excel 文档 希望包含其电话联系人列表 作为开发人员 我应该读取该 Excel 文件 将其转换为数据表并将其插入数据库 问题是 一些客户有大量的联系人 比如 5000 个甚至更多的联系人 当我尝试将这么多
  • 使用 COALESCE 函数在变量中附加消息

    下面是我的代码 DECLARE msg NVARCHAR MAX NULL WITH CTE AS SELECT A AS Message UNION SELECT B AS Message UNION SELECT C AS Messag
  • GCC 对弱 const 变量的优化错误

    我有一种奇怪的感觉gcc处理事情时的行为弱常量变量在不同的优化级别 即 O0 or O1 这是代码 def h 声明 const int var int copy int do copy void weak c weak var定义 do
  • SQL Server 2005,批量更新或插入

    我正在寻找一种解决方案来执行插入 重复键更新等 SQL Server 2005 中的操作 此操作可能会插入或更新大量条目 SQL Server 2008 有一个简洁的 MERGE 操作 可以完美地完成此操作 问题是我们只能使用 SQL Se
  • node.js:从标准输入读取同步?

    是否可以从node js中的stdin同步读取 因为我正在用 JavaScript 编写一个 Brainfuck 的 JavaScript 编译器 只是为了好玩 Brainfuck支持需要同步实现的读操作 我试过这个 const fs re
  • AJAX 请求中的内容类型和数据类型是什么?

    POST 请求中的内容类型和数据类型是什么 假设我有这个 ajax type POST url v1 user datatype application json contentType text plain success functio
  • 如何使用 C/C++ 获取数字锁定状态?

    我读过 Gdk 论坛链接 上面说从 3 0 版本开始就实现了获取 num lock state api 但我使用的是 2 4 版本 无法更新到 3 0 版本 因为我需要支持较低的 Linux 版本 这是讨论链接 http mail gnom
  • 如何为列表的每个索引评分

    def voting borda rank ballots list of list of str gt tuple of str list of int 该参数是一个 4 元素列表的列表 表示单个选区的排名选票 The 博尔达伯爵 htt
  • 内核模块与用户空间程序通信的最佳方式是什么?

    这个问题看起来很简单 但我想发送一个事件来通知我的用户空间程序模块缓冲区已准备好读取 例如 我的内核模块中有一个缓冲区 其数据将由用户空间程序消耗 如果所有数据都被消耗 内核模块必须在新数据到达时通知我的程序 这是生产者 消费者的典型问题