以编程方式在 C 中检查 NIC 在 linux 中关闭时是不是有链接

Posted

技术标签:

【中文标题】以编程方式在 C 中检查 NIC 在 linux 中关闭时是不是有链接【英文标题】:Programatically check in C whether a NIC has link when it's DOWN in linux以编程方式在 C 中检查 NIC 在 linux 中关闭时是否有链接 【发布时间】:2014-10-14 16:08:41 【问题描述】:

有没有办法检查我的网卡(已关闭)是否有良好的链接 在 C 中发送/接收帧?

我尝试检查IFF_RUNNINGETHTOOL_GLINK(分别 通过 SIOCGIFFLAGSSIOCETHTOOL) 与 ioctl 但他们只设置了这个 网卡启动时的信息。

我也尝试直接检查/sys/class/net/XXX/carrier 文件,但是 读取文件时,我总是收到无效参数

有人知道在 NIC 关闭时获取此信息的方法吗?

【问题讨论】:

也许通过/proc/ 中的一些文件?阅读proc(5) 抱歉,回答迟了。到目前为止我什么也没找到。 /proc/net/dev 有一些关于设备的统计信息,但我没有看到任何可以用来猜测链接状态的信息。还有其他想法吗? 【参考方案1】:

您可以致电mii-tool 获取此信息(如果有)。一些驱动程序会在接口关闭时报告状态,但许多(大多数?)不会。

(它使用SIOCGMIIPHYSIOCGMIIREG ioctls)。

【讨论】:

它确实可以在我的嵌入式 linux 上运行,但不能在我的 Fedora 18 桌面上运行(不记得 NIC 驱动程序)。我不确定后一个结果是否有效,因为当我关闭网卡时,开关 LED 也关闭了。在这种情况下,网卡可能真的失去了链接。在其他一些情况下,ioctl 只为非 MII 接口返回 ENOTSUP。我将通过这些调用尝试更多示例。谢谢

以上是关于以编程方式在 C 中检查 NIC 在 linux 中关闭时是不是有链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 中检查我的网卡速度?

以编程方式在 Linux 中查找文件类型

如何使用 C 在 Linux 上以编程方式杀死进程树

c_cpp 这个脚本以编程方式在Linux中找到ALSA设备,这可能有点棘手。 #alsa#device-driver #linux #c

C++ Qt - 检查蒸汽游戏是不是正在以编程方式运行

如何在不轮询内核的情况下监控 C 程序中的 NIC 状态(启动/关闭)?