- /********************************** (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>