1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 用c/c++实现linux下检测网络接口状态【ZT】

用c/c++实现linux下检测网络接口状态【ZT】

时间:2020-04-01 01:46:13

相关推荐

用c/c++实现linux下检测网络接口状态【ZT】

要写个检测网络接口链接状态的东西,又不喜欢不断的ping别的地址,也不想调用其他命令行工具来做这个,于是在google了n多内容未果之后,搜刮到个检测工具的源代码,从里面抠出来一块儿就ok了,版权不是我的哦,哈哈……主要根据eth-tool进行的。还下载了一个简单的ethlist程序。

以下代码在fedora 9 / CentOS 5.2下调试通过:)

struct ifreq {

charifr_name[IFNAMSIZ]; /* interface name, e.g., "le0 " */

union {

struct sockaddr ifru_addr;

struct sockaddr ifru_dstaddr;

struct sockaddr ifru_broadaddr;

short ifru_flags;

intifru_metric;

caddr_t ifru_data;//typedef void *caddr_t;

} ifr_ifru;

};

网络编程时,套接口ioctl函数的参数struct ifreq定义在哪个文件里?有什么作用?

/usr/include/net/if.h

用来配置ip地址,激活接口,配置MTU等接口信息的。

linux系统中建议使用netlink接口替代

兄弟,很多人不回帖是因为这个问题问的有些那个,

不知道你是不是学网络编程的。送你俩建议:

UNP Ed3 VOL1一定要随时放在手边。

/usr/include目录下以及其子目录 sys/ net/ netinet/ linux 的文件希望你

没事就去翻,就当挖宝一样。总有很多让你兴奋的东西。

#include <sys/types.h>

#include <string.h>

#include <stdlib.h>

#include <sys/ioctl.h>

#include <stdio.h>

#include <errno.h>

#include <net/if.h>

struct ethtool_value {

__uint32_t cmd;

__uint32_t data;

};

int main(int argc, char *argv[])

{

struct ethtool_value edata;

int fd = -1, err = 0;

struct ifreq ifr;

memset(&ifr, 0, sizeof(ifr));

strcpy(ifr.ifr_name, "eth0");

fd = socket(AF_INET, SOCK_DGRAM, 0);

if (fd < 0) {

perror("Cannot get control socket");

return 70;

}

edata.cmd = 0x0000000a;//command is Get link status

ifr.ifr_data = (caddr_t)&edata;

err = ioctl(fd, 0x8946, &ifr);//0X8946是个ioctl命令

if (err == 0) {

fprintf(stdout, "Link detected: %s\n",

edata.data ? "yes":"no");

} else if (errno != EOPNOTSUPP) {

perror("Cannot get link status");

}

return 0;

}

本文来自CSDN博客,转载请标明出处:/21bird/archive//11/21/3345459.aspx

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。