通过netlink监听广播信息

参考文章:https://zhuanlan.zhihu.com/p/703570419
https://blog.csdn.net/congchp/article/details/136390067

1、Netlink基础概念

Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,同时它也以用于进程间通信(Netlink 更多用于内核通信,进程之间通信更多使用Unix域套接字)。

在一般情况下,用户态和内核态通信会使用传统的Ioctl、sysfs属性文件或者procfs属性文件,这3种通信方式都是同步通信方式,由用户态主动发起向内核态的通信,内核无法主动发起通信。

而Netlink是一种异步全双工的通信方式,它支持由内核态主动发起通信,内核为Netlink通信提供了一组特殊的API接口,用户态则基于socket API,内核发送的数据会保存在接收进程socket 的接收缓存中,由接收进程处理。
在这里插入图片描述
为什么要有netlink
内核中有其他一些方法可以实现用户空间和内核通信,如procfs、sysfs和ioctrl等;netlink相比于这些方法,有以下优势:

  • 任何一方都不需要轮询;如果通过文件通信,用户态应用需要不断检查是否有新消息到达;
  • ne
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux操作系统是一种开放源代码的操作系统,其用户空间可以通过使用netlink监听uevent(用户事件)。netlink是一种用于内核和用户空间之间进行通信的机制,可以实现内核对用户空间事件的广播。 在Linux中,用户空间使用netlink监听uevent的主要目的是为了获取与设备相关的信息和事件通知。通过监听uevent,用户空间可以获得设备的插拔状态、设备的属性变化、系统的电源管理事件等等。 使用netlink监听uevent的过程一般包括以下几个步骤: 1. 创建与内核通信的socket:用户空间需要创建一个socket,并使用socket系统调用将其与netlink协议相关联。 2. 绑定socket到uevent通信组:调用bind系统调用将socket绑定到uevent通信组,以便接收与设备相关的事件通知。 3. 接收并处理uevent:使用recv系统调用从socket中接收uevent消息,并在用户空间中对其进行处理。用户空间可以根据收到的uevent消息来进行相应的操作,例如更新设备列表、触发相关动作等。 需要注意的是,使用netlink监听uevent需要具备相应的权限。一般情况下,只有具有管理员权限的用户或特定的用户组才能够进行这类操作。 在Linux中,用户空间使用netlink监听uevent是实现设备管理和与设备相关的操作的重要手段之一。它可以使用户空间获取到内核层面的设备信息,并根据这些信息做出相应的响应和决策。这对于开发系统工具、设备驱动程序以及一些需要实时监控设备状态的应用程序非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃秃秃秃哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值