gpt4 book ai didi

c++ - 结构 ifreq : different definition in "linux/if.h" and man page

转载 作者:行者123 更新时间:2023-12-04 11:15:38 26 4
gpt4 key购买 nike

在在线手册页 netdevice(7) - Linux man page , ifreq 结构的定义为:

struct ifreq {
char ifr_name[IFNAMSIZ]; /* Interface name */
union {
struct sockaddr ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_netmask;
struct sockaddr ifr_hwaddr;
short ifr_flags;
int ifr_ifindex;
int ifr_metric;
int ifr_mtu;
struct ifmap ifr_map;
char ifr_slave[IFNAMSIZ];
char ifr_newname[IFNAMSIZ];
char *ifr_data;
};
};

但是我的 linux header 显示了不同的定义。下面是来自/usr/include/linux/if.h 的定义
我使用的内核版本是 Linux 3.18
struct ifreq {
#define IFHWADDRLEN 6
union
{
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
} ifr_ifrn;

union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
void * ifru_data;
struct if_settings ifru_settings;
} ifr_ifru;
};

为什么要进行这种更改?为了与不同的 linux 发行版具有可移植性,我应该坚持哪一个?

最佳答案

不同的头文件; linux/if.h 和 net/if.h 是相似的,但是除非您针对的是 linux 内核而不是 linux 用户空间,否则您可能想要使用 net/if.h。

关于c++ - 结构 ifreq : different definition in "linux/if.h" and man page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com