当前位置: 首页 > 面试题库 >

如何在不轮询内核的情况下在C程序中监视NIC状态(上/下)?

司寇飞航
2023-03-14
问题内容

现在,我需要实时获取NIC的状态(向上或向下)。这意味着当NIC在阻塞循环中上下时,我必须捕获内核中断。

我的第一个愚蠢的方法是检查 / sys / class / net / eth0 / operstate 或使用 ioctl
在循环中每隔100ms获取一次ifflag。但是100毫秒对于应用程序重新路由流量太长,而且每100毫秒轮询一次内核不是一个好主意。

一旦我注意到可以在块模式下监视文件的 inotify 函数。但是不幸的是,它不能监视/ sys / class / net / eth0 /
operstate文件,因为/ sys位于RAM中而不是磁盘中。

那么,除了编写内核模块以块模式在C程序中捕获NIC中断(上/下)之外,还有什么方法可用吗?


问题答案:

是的,打开一个netlink套接字,并收听RTMGRP_LINK(网络接口创建/删除/上/下事件)多播组。

网络链路手册页这里有一个具体的例子来做到这一点。



 类似资料:
  • 我不想再使用powermock了。因为junit5开始模拟静态类。因此,我试图摆脱powermock方法。 当我使用PowerMock时,我可以很容易地发现一个具有私有构造函数的类,然后我调用静态方法。 这是我代码的一部分(当我使用PowerMock时) 在我做了MessageValidationUtils.class的间谍对象后,我正在测试这个: 经过一些研究,我找不到任何与监视一个具有私有构造

  • 我正在使用React和Redux,我需要用更新的数据更新我的状态。“我的状态”包含如下对象数组: 所以在这个reducer中,我只想用我的负载替换或更新整个状态数组,但不改变我的状态。我的有效负载还包含与上面相同的对象数组,但包含更新的数据。

  • 为了在我的应用程序中执行一些IO操作,我编写了一个线程,它的run方法上没有任何东西,但它有几个其他方法,比如void write(字符串文件名,字符串数据)和void create(字符串文件号),所有这些方法都非常有效。我的问题是,我过去认为这个线程是在后台运行的,或者类似的东西,但是自从删除了主活动上的.run()语句后,调用所述方法仍然有效,我如何让一个线程运行并等待活动的消息而不阻塞应用

  • 问题内容: 我有一个简单的程序,尝试访问用户空间中的物理内存,内核在其中存储了第一个struct页面。在64位计算机上,此地址为: 内核虚拟地址:ffffea0000000000 物理地址:0000620000000000 我正在尝试通过用户空间中的mmap访问此物理地址。但是以下代码使内核崩溃。 问题答案: 我想我已经找到了问题-与x86上的/ dev / mem内存映射保护有关。 请参阅此LW

  • 我看到当我将我的应用程序迁移到iOS7时,当呈现视图控制器时,导航栏会出现在状态栏下。我想很多人都遇到过同样的问题。这是我看到的截图: > 新视图必须以“模式”显示,即我需要presentViewController。 显示某种导航栏或工具栏,状态栏采用导航栏的背景色alaiOS7样式。 它必须对iOS6起作用。 我使用xib来处理布局,并启用了自动布局。 呃,我们是不是又回到了iOS前的5天,又

  • 我正在用laravel建立一个网站,我想调试我的程序,但很难使用dd(),因为它会立即停止程序,我想让它显示每执行一行,任何想法?任何帮助将不胜感激,谢谢。