我正在使用getifaddrsLinux 函数来获取有关运行 Debian Jessie 内核 3.16.0 的 Linux 计算机上的网络接口的信息。
我想知道的信息之一是网络统计信息(丢弃的数据包、发送的数据包等),正如 getifaddrs 的手册页所述,它包含在when设置rtnl_link_stats为 所指向的结构中。ifaddrs::ifa_addr::ifa_dataifaddrs::if_addr::sa_familyAF_PACKET
这适用于以太网接口,但不适用于机器上的 CAN 接口,因为ifaddrs::ifa_addr为 NULL,因此AF_PACKET永远不会为任何 CAN 接口返回。
以下 C++ 代码...
#include <ifaddrs.h>
#include <linux/if_link.h>
#include <net/if.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <cstdio>
#include <cstdlib>
int main() {
ifaddrs *addrs;
if (getifaddrs(&addrs) == -1) {
perror("getifaddrs");
return EXIT_FAILURE;
}
printf("AF_PACKET: %d\n\n", (int)AF_PACKET);
for (auto addr = addrs; addr != NULL; addr = addr->ifa_next) {
if (addr->ifa_addr != nullptr) …Run Code Online (Sandbox Code Playgroud)