我想确定网卡是否已启用,启动和插入。基本上,我想知道网卡是否可以正常工作。我需要使用C ++程序提供此信息,并希望在网络无法正常工作时显示错误消息。如果可能,我想避免使用shell命令来确定此信息。
答案 0 :(得分:16)
您可以查看/sys/class/net/eth0/operstate
其中eth0是您的界面,看看它是否已启动。
查看/sys/class/net/eth0/carrier
以查看是否有运营商。
虽然我想执行ifconfig
并且朋友会给你更多兼容* BSD。
答案 1 :(得分:5)
AF_NETLINK
套接字sockaddr_nl
nl_groups = RTMGRP_LINK
RTM_GETLINK
发送给内核RTM_NEWLINK
和RTM_DELLINK
条消息答案 2 :(得分:4)
请记住,在Linux上“一切”都是一个文件。
最好的方法是使用已安装在sysfs
的已批准的内核< - >用户空间通信,即/sys
。网络设备在/sys/class/net
如果您想使用ioctl
界面,请查看man netdevice
答案 3 :(得分:1)
您想如何识别网卡?您可以尝试查看/etc/udev/rules.d/70-persistent-net.rules
,它将硬件MAC地址映射为漂亮的名称(例如eth0)。
然后,当您拥有更好的名称时,您可以运行ethtool eth0
之类的内容来确定它是否[物理上]连接(最后一行),ifconfig eth0
以确定它是否已启动(查找“UP BROADCAST ...”),如果它有IP地址。
我愿意猜测这有自动库吗?你环顾四周吗?我不确定NetworkManager中是否有易于访问的代码,但这应该是一个很好的首选。
答案 4 :(得分:1)
运行getifaddrs
的输出,您可以使用MAC地址的链接层来标识适配器,并检查ifa_flags
的IFF_UP。使用AF_NETLINK
获取有关界面更改的通知。