现在,我需要实时获取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(网络接口(interface)创建/删除/上/下事件)多播组。
netlink手册页here拥有一个特定的示例来执行此操作。
关于linux - 如何在不轮询内核的情况下在C程序中监视NIC状态(上/下)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7225888/