Linux下如何用C编程实现检测网卡与网线的连接状态

来源:互联网 发布:手机迅雷网络异常 编辑:程序博客网 时间:2024/05/21 10:34

http://www.caojunfei.com/?p=614


  1. int get_netportstatus(const char *interface) {  
  2.   char cmd[1024];  
  3.   char *tt;  
  4.   FILE *fp;  
  5.   int devflag;  
  6.   devflag=get_netflag(interface);  
  7.   if (devflag==DEV_DOWN) {  
  8.     sprintf(cmd,"ifconfig %s up",interface);  
  9.     system(cmd);  
  10.   }  
  11.   sprintf(cmd,"ethtool %s | grep \"Link detected\" > /tmp/eth.temp",interface);  
  12.   system(cmd);  
  13.   if (devflag==DEV_DOWN) {  
  14.     sprintf(cmd,"ifconfig %s down",interface);  
  15.     system(cmd);  
  16.   }  
  17.   fp=fopen("/tmp/eth.temp","r");  
  18.   if (fp==NULL) {  
  19.     system("rm -rf /tmp/eth.temp");  
  20.     return -1;  
  21.   }  
  22.   fgets(cmd,1024,fp);  
  23.   fclose(fp);  
  24.   system("rm -rf /tmp/eth.temp");  
  25.   tt=strstr(cmd,"no");  
  26.   if (tt!=NULL) return LINK_DOWN;  
  27.   tt=strstr(cmd,"yes");  
  28.   if (tt!=NULL) return LINK_UP;  
  29.   return -1;  
  30. }  
[c] view plain copy
  1. int get_netportstatus(const char *interface) {  
  2.   char cmd[1024];  
  3.   char *tt;  
  4.   FILE *fp;  
  5.   int devflag;  
  6.   devflag=get_netflag(interface);  
  7.   if (devflag==DEV_DOWN) {  
  8.     sprintf(cmd,"ifconfig %s up",interface);  
  9.     system(cmd);  
  10.   }  
  11.   sprintf(cmd,"ethtool %s | grep \"Link detected\" > /tmp/eth.temp",interface);  
  12.   system(cmd);  
  13.   if (devflag==DEV_DOWN) {  
  14.     sprintf(cmd,"ifconfig %s down",interface);  
  15.     system(cmd);  
  16.   }  
  17.   fp=fopen("/tmp/eth.temp","r");  
  18.   if (fp==NULL) {  
  19.     system("rm -rf /tmp/eth.temp");  
  20.     return -1;  
  21.   }  
  22.   fgets(cmd,1024,fp);  
  23.   fclose(fp);  
  24.   system("rm -rf /tmp/eth.temp");  
  25.   tt=strstr(cmd,"no");  
  26.   if (tt!=NULL) return LINK_DOWN;  
  27.   tt=strstr(cmd,"yes");  
  28.   if (tt!=NULL) return LINK_UP;  
  29.   return -1;  
  30. }  

用c/c++实现Linux下检测网络接口状态

view plaincopy to clipboardprint?
  1. #include <sys types.h="">  
  2. #include <string.h>  
  3. #include <stdlib.h>  
  4. #include <sys ioctl.h="">  
  5. #include <stdio.h>  
  6. #include <errno.h>  
  7. #include <net if.h="">  
  8.   
  9. struct ethtool_value {  
  10.         __uint32_t      cmd;  
  11.         __uint32_t      data;  
  12. };  
  13.   
  14. int main(int , char* [])  
  15. {  
  16.     struct ethtool_value edata;  
  17.     int fd = -1, err = 0;  
  18.     struct ifreq ifr;  
  19.   
  20.         memset(&ifr, 0, sizeof(ifr));  
  21.         strcpy(ifr.ifr_name, "eth0");  
  22.         fd = socket(AF_INET, SOCK_DGRAM, 0);  
  23.         if (fd < 0) {  
  24.                 perror("Cannot get control socket");  
  25.                 return 70;  
  26.         }  
  27.   
  28.         edata.cmd = 0x0000000a;  
  29.         ifr.ifr_data = (caddr_t)&edata;  
  30.         err = ioctl(fd, 0x8946, &ifr);  
  31.         if (err == 0) {  
  32.                 fprintf(stdout, "Link detected: %s\n",  
  33.                         edata.data ? "yes":"no");  
  34.         } else if (errno != EOPNOTSUPP) {  
  35.                 perror("Cannot get link status");  
  36.         }  
  37.    return 0;  


  1. #include <net if.h="">  // IFF_RUNNING  
  2.   
  3. //如果网卡已脸上网线,返回0,否则返回-1.  
  4. int check_nic(char *nic)  
  5. {  
  6.     struct ifreq ifr;  
  7.     int skfd = socket(AF_INET, SOCK_DGRAM, 0);  
  8.   
  9.     strcpy(ifr.ifr_name, nic_name);  
  10.     if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)  
  11.     {  
  12.         return -1;  
  13.     }  
  14.     if(ifr.ifr_flags & IFF_RUNNING)  
  15.         return 0;  // 网卡已插上网线  
  16.     else return -1;  
  17. }  


转载:http://blog.csdn.net/lwpping/article/details/7440817


阅读全文
0 0
原创粉丝点击