以编程方式在 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_RUNNING
和ETHTOOL_GLINK
(分别
通过 SIOCGIFFLAGS
和 SIOCETHTOOL
) 与 ioctl 但他们只设置了这个
网卡启动时的信息。
我也尝试直接检查/sys/class/net/XXX/carrier
文件,但是
读取文件时,我总是收到无效参数。
有人知道在 NIC 关闭时获取此信息的方法吗?
【问题讨论】:
也许通过/proc/
中的一些文件?阅读proc(5)
抱歉,回答迟了。到目前为止我什么也没找到。 /proc/net/dev
有一些关于设备的统计信息,但我没有看到任何可以用来猜测链接状态的信息。还有其他想法吗?
【参考方案1】:
您可以致电mii-tool
获取此信息(如果有)。一些驱动程序会在接口关闭时报告状态,但许多(大多数?)不会。
(它使用SIOCGMIIPHY
和SIOCGMIIREG
ioctls)。
【讨论】:
它确实可以在我的嵌入式 linux 上运行,但不能在我的 Fedora 18 桌面上运行(不记得 NIC 驱动程序)。我不确定后一个结果是否有效,因为当我关闭网卡时,开关 LED 也关闭了。在这种情况下,网卡可能真的失去了链接。在其他一些情况下,ioctl 只为非 MII 接口返回ENOTSUP
。我将通过这些调用尝试更多示例。谢谢以上是关于以编程方式在 C 中检查 NIC 在 linux 中关闭时是不是有链接的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 这个脚本以编程方式在Linux中找到ALSA设备,这可能有点棘手。 #alsa#device-driver #linux #c