Linux下检测网卡与网线连接状态,使用ioctl向socket发送SIOCETHTOOL命令字。 link_stat.c #include stdio.h> #include stdlib.h> #include string.h> #include fcntl.h> #include errno.h> #include sys/ioctl.h> #include sys/types.h> #include sys/socket.h> #include linux/if.h> #include linux/sockios.h> #include linux/ethtool.h> int get_netlink_status(const char *if_name); int main() { if(getuid() != 0) { fprintf(stderr, "Netlink Status Check Need Root Power./n"); return 1; } printf("Net link status: %d/n", get_netlink_status("eth0")); return 0; } // if_name like "ath0", "eth0". Notice: call this function // need root privilege. // return value: // -1 -- error , details can check errno // 1 -- interface link up // 0 -- interface link down. int get_netlink_status(const char *if_name) { int skfd; struct ifreq ifr; struct ethtool_value edata; edata.cmd = ETHTOOL_GLINK; edata.data = 0; memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name) - 1); ifr.ifr_data = (char *) &edata; if (( skfd = socket( AF_INET, SOCK_DGRAM, 0 )) 0) return -1; if(ioctl( skfd, SIOCETHTOOL, &ifr ) == -1) { close(skfd); return -1; } close(skfd); return edata.data; } 参考: http://noliper.spaces.live.com/blog/cns!920E150C4B69A294!605.entry http://blog.chinaunix.net/u/12592/showart_1798479.html |
linux下检测网卡与网线连通状态
最新推荐文章于 2024-07-08 22:09:55 发布