【发布时间】:2014-07-16 16:55:09
【问题描述】:
我们有一个运行 BusyBox Linux(内核 2.6.x)的嵌入式 SoC,我们需要监控或至少在网络连接断开或出现时及时通知(捕捉其他事件会很好,但不是必需的)。
我花了很长时间在谷歌上搜索和阅读 SO 线程,似乎有很多不同的答案,具体取决于特定操作系统上的确切任务和月相等。
我们的具体标准是:
- 我们从 C 程序内部查看,因此 C 代码优于命令行调用。
- 虽然接口始终存在,但我们不能保证它是或曾经启动过(我在一些示例中看到 cmets 仅在接口为
up时才有效,即使链接为down) - 最好不必轮询,而是在状态更改消息发生时发送/捕获它们。我相信内核可能已经从驱动程序中获得了这样的消息,但我不确定是否有什么可以挂钩的?
我已将看似可能的答案缩小到几个候选人,但无法确定哪个是最好的(开销最小、最可靠、在未来版本中最不可能中断):
cat sys/class/net/eth0/operstate-
cat sys/class/net/eth0/carrier(我找不到很好的解释这两者之间的区别) - 按照answers here 和here(看起来更整洁),使用 ifreq 或各种 ioctl 调用序列来读取套接字状态(我觉得有点乱)。
- 以某种方式捕获状态更改消息???
【问题讨论】:
标签: c linux networking sysfs