linux 下获取当前网络连接状态的两种方法
来源:互联网 发布:邮箱注册淘宝 编辑:程序博客网 时间:2024/06/06 02:24
#include <sys/socket.h>#include <sys/ioctl.h>#include <linux/if.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */typedef enum { IFSTATUS_UP, IFSTATUS_DOWN, IFSTATUS_ERR } interface_status_t;typedef signed int u32;/* for passing single values */struct ethtool_value{ u32 cmd; u32 data;};interface_status_t interface_detect_beat_ethtool(int fd, char *iface){ struct ifreq ifr; struct ethtool_value edata; memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name)-1); edata.cmd = ETHTOOL_GLINK; ifr.ifr_data = (caddr_t) &edata; if (ioctl(fd, SIOCETHTOOL, &ifr) == -1) { perror("ETHTOOL_GLINK failed "); return IFSTATUS_ERR; } return edata.data ? IFSTATUS_UP : IFSTATUS_DOWN;}int main (int argc, char *argv[]){ FILE *fp; interface_status_t status; char buf[512] = {'\0'}; char hw_name[10] = {'\0'}; char *token = NULL; /* 获取网卡名称 */ if ((fp = fopen("/proc/net/dev", "r")) != NULL) { while (fgets(buf, sizeof(buf), fp) != NULL) { if(strstr(buf, "eth") != NULL) { token = strtok(buf, ":"); while (*token == ' ') ++token; strncpy(hw_name, token, strlen(token)); } } } fclose(fp);//方法一:查看一个文件文件,相对来说比较简单#if 1 char carrier_path[512] = {'\0'}; memset(buf, 0, sizeof(buf)); snprintf(carrier_path, sizeof(carrier_path), "/sys/class/net/%s/carrier", hw_name); if ((fp = fopen(carrier_path, "r")) != NULL) { while (fgets(buf, sizeof(buf), fp) != NULL) { if (buf[0] == '0') { status = IFSTATUS_DOWN; } else { status = IFSTATUS_UP; } } } else { perror("Open carrier "); } fclose(fp);#endif//方法二:用函数吧!有点复杂,但是也是一种有效的办法#if 1 int fd; if((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket "); exit(0); } status = interface_detect_beat_ethtool(fd, hw_name); close(fd);#endif switch (status) { case IFSTATUS_UP: printf("%s : link up\n", hw_name); break; case IFSTATUS_DOWN: printf("%s : link down\n", hw_name); break; default: printf("Detect Error\n"); break; } return 0;}
0 0
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态的两种方法
- linux 下获取当前网络连接状态
- iOS 获取当前网络状态的两种方法
- iOS 两种方法获取当前网络状态
- 获取网络连接名称“本地连接”的两种方法
- ios获取当前的网络状态, 获取当前连接的wifi名字
- ios获取当前的网络状态, 获取当前连接的wifi名字
- ios获取当前的网络状态, 获取当前连接的wifi名字
- Linux服务器当前各种TCP网络连接状态的统计
- Linux服务器当前各种TCP网络连接状态的统计
- 获取当前时间的两种方法
- JQuery中如何重置(reset)表单
- Document对象之利用title属性制作文字逐渐出现的标题
- Android颜色
- 纯CSS实现小三角提示信息
- 当大黄鸭遇见邦邦熊
- linux 下获取当前网络连接状态的两种方法
- iOS和Android设计规范备忘表
- SimHash简介以及java实现
- DHL快递推举措增强服务能力
- 从云主机入手构建全面云安全
- 【Real】Mac 环境下安装 Php Redis 扩展
- 我们一起学习unity3d
- Sicily 1570 Hopeless Coach
- Makefile学习