本文主要是介绍嵌入式 hi3518平台检测网线是否插上,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/********************************** (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>
这篇关于嵌入式 hi3518平台检测网线是否插上的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!