返回> 网站首页
[转载]linux下检测网卡与网线连通状态
yoours2015-06-10 12:15:56
简介一边听听音乐,一边写写文章。
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; } |
文章评论
1820人参与,0条评论