0

我们有一个运行 BusyBox Linux(内核 2.6.x)的嵌入式 SoC,当网络连接断开或出现时,我们需要监控或至少及时通知(捕捉其他事件会很好,但不是必需的) .

我花了很长时间在谷歌上搜索和阅读 SO 线程,根据特定操作系统上手头的确切任务和月相等,似乎有很多不同的答案。

我们的具体标准是:

  • 我们从 C 程序内部查看,因此 C 代码优于命令行调用。
  • 尽管接口始终存在,但我们不能保证它是否已经启动或曾经启动(我看过一些示例的评论,这些示例仅在界面处于up即使链接状态时也有效down
  • 最好不必轮询,而是在状态更改消息发生时发送/捕获它们。我相信内核可能已经从驱动程序中获得了这样的消息,但我不确定是否有什么可以挂钩的?

我已将可能的看似答案缩小到几个候选人,但无法确定哪个是最好的(开销最小,最可靠,在未来版本中最不可能中断):

  • cat sys/class/net/eth0/operstate
  • cat sys/class/net/eth0/carrier (我无法很好地解释这两者之间的区别)
  • 根据此处和此处的答案(看起来更整洁),使用 ifreq 或各种 ioctl 调用序列来读取套接字状态(对我来说看起来有点乱)。
  • 以某种方式捕获状态更改消息???
4

1 回答 1

0

您可以使用 inotify 继续检查 /sys/class/net/eth0/operstate。Inotify 允许在指定的文件或目录上监视不同的事件,例如 CREATE、MODIFY、WRITE 等。

您可以在此处查看工作示例

于 2014-05-27T18:10:01.080 回答