我想确定网卡是否已启用、打开和插入。基本上,我想知道网卡是否可以工作。我需要从C++程序中获得此信息,并希望在网络不能正常工作时显示错误消息。如果可能,我希望避免使用shell命令来确定此信息。
发布于 2010-07-10 04:53:33
您可以查看/sys/class/net/eth0/operstate
,其中eth0是您的接口,以查看它是否处于运行状态。
查看/sys/class/net/eth0/carrier
以查看是否有运营商。
不过我猜执行ifconfig
和friends会让你对*BSD有更好的兼容性。
发布于 2010-07-10 04:55:23
记住,在Linux上“一切”都是一个文件。
最好的方法是使用安装在/sys
上的经过批准的内核<->用户空间通信,即sysfs
。网络设备链接在/sys/class/net
上
如果您希望使用ioctl
接口,请查看man netdevice
发布于 2010-07-10 05:59:30
您希望如何识别网卡?您可以尝试查看/etc/udev/rules.d/70-persistent-net.rules
,它将硬件MAC地址映射为好用的名称(如eth0)。
然后,当您有了更好的名称时,您可以运行ethtool eth0
来确定它是否物理连接(最后一行),运行ifconfig eth0
来确定它是否在运行(查找"UP BROADCAST..."),以及它是否有IP地址。
不过,我想有一些自动库可以做到这一点;您看过周围的地方了吗?我不确定NetworkManager中是否有易于访问的代码,但这应该是一个很好的首选。
https://stackoverflow.com/questions/3216458
复制相似问题