標題幾乎說明了一切。如果我運行ifconfig
,我得到這個:如何檢查是否接口高達
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet -snip- netmask 255.255.255.0 broadcast -snip-
...
利用這一點,我可以知道這是否漲不跌(<UP,...
),但我希望能夠做到這一點在C(或C++,如果有有更簡單的解決方案),而不依賴於解析外部進程。
這裏是我到目前爲止(不工作)了:
bool is_interface_online(std::string interface) {
struct ifreq ifr;
int sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP);
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, interface.c_str());
if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {
perror("SIOCGIFFLAGS");
}
close(sock);
return !!(ifr.ifr_flags | IFF_UP);
}
任何人都可以點我在這個正確的方向是什麼?
的ifconfig是開源的BTW – Slava