嵌入式 hi3518平台检测网线是否插上

来源:互联网 发布:纯语音直播软件 编辑:程序博客网 时间:2024/04/29 20:30
/********************************** (C) COPYRIGHT ******************************** File Name          : linkstatus_check.c* Author             : skdkjzz* Date               : 2014/08/07* Description        : 网线是否插上*********************************************************************************/#include <sys/types.h>  #include <string.h>  #include <stdlib.h>  #include <sys/types.h>  #include <sys/ioctl.h>  #include <sys/stat.h>  #include <stdio.h>  #include <string.h>  #include <errno.h>  #include <net/if.h>  #include <sys/utsname.h>  #include <limits.h>  #include <ctype.h>     #include <sys/socket.h>  #include <netinet/in.h>  #include <arpa/inet.h>     #include <linux/sockios.h>    #define ETHTOOL_GLINK   0x0000000a   /* Get link status (ethtool_value) */  struct ethtool_value {                        unsigned int   cmd;                        unsigned int   data;                        };      int get_netlink_status(const char *if_name);     /****************************************************************    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;  }  int main()  {      char net_buf[10]="eth0";     printf("Net link status: %s\n", get_netlink_status(net_buf) == 1 ? "up" : "down");      return 0;  }      </span>


0 0
原创粉丝点击