【问题标题】:sysfs, ifreq, IOCTL or ??? to programatically monitor network statussysfs、ifreq、IOCTL 或 ???以编程方式监控网络状态
【发布时间】: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 herehere(看起来更整洁),使用 ifreq 或各种 ioctl 调用序列来读取套接字状态(我觉得有点乱)。
  • 以某种方式捕获状态更改消息???

【问题讨论】:

    标签: c linux networking sysfs


    【解决方案1】:

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

    你可以看到工作示例here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多