Dirt Jumping & Urban
_mystic
全部博文(41)
(0)
2011年(4)
2010年(32)
2009年(3)
2008年(2)
wongwon
wlbdd
xyhlove
始如初见
国风地带
yangyefe
as807048
heqiang1
List_lin
分类: LINUX
2010-07-27 16:20:42
#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> typedef unsigned short u16; typedef unsigned int u32; typedef unsigned char u8; #include <linux/sockios.h> #include <linux/ethtool.h> int get_netlink_status(const char *if_name); int main(int argc, char* argv[]) { if(argc != 2) { fprintf(stderr, "usage: %s ", argv[0]); return -1; } if(getuid() != 0) { fprintf(stderr, "Netlink Status Check Need Root Power.\n"); return 1; } printf("Net link status: %s\n", get_netlink_status(argv[1])==1?"up":"down"); 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; }
上一篇:Android系统文件系统的权限设置
下一篇:Android prelink map
登录 注册