C++ 检测网络接口更改

C++ 检测网络接口更改,c++,c,linux,network-programming,C++,C,Linux,Network Programming,我的UBUNTU机器有两个网络接口端口。我想用C/C++编写一个应用程序,在这里我可以检测网络接口的变化并打印结果 e、 g.当两条网络电缆连接时,应用程序应打印两个接口都已启动。 当我拔下一根电缆时,应用程序应该删除该接口的所有信息,并打印哪个接口是向下和向上的 您可以使用ioctl()轮询链接的状态。: 如果您想立即获得有关更改的信息, 然后侦听来自内核的netlink消息 请参阅手册页 要创建用于获取链接事件的AF_NETLINK套接字: const int netlink_fd = so

我的UBUNTU机器有两个网络接口端口。我想用C/C++编写一个应用程序,在这里我可以检测网络接口的变化并打印结果

e、 g.当两条网络电缆连接时,应用程序应打印两个接口都已启动。
当我拔下一根电缆时,应用程序应该删除该接口的所有信息,并打印哪个接口是向下和向上的

您可以使用
ioctl()轮询链接的状态。

如果您想立即获得有关更改的信息, 然后侦听来自内核的netlink消息

请参阅手册页

要创建用于获取链接事件的AF_NETLINK套接字:

const int netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (netlink_fd != -1)
{
    struct sockaddr_nl sa;

    memset(&sa, 0, sizeof(sa));
    sa.nl_family = AF_NETLINK;
    sa.nl_groups = RTNLGRP_LINK;
    bind(netlink_fd, (struct sockaddr*)&sa, sizeof(sa));
}
..并根据您的需要接收和处理消息


有一个库可以简化此操作。

您可以使用
ioctl()轮询链接状态。

如果您想立即获得有关更改的信息, 然后侦听来自内核的netlink消息

请参阅手册页

要创建用于获取链接事件的AF_NETLINK套接字:

const int netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (netlink_fd != -1)
{
    struct sockaddr_nl sa;

    memset(&sa, 0, sizeof(sa));
    sa.nl_family = AF_NETLINK;
    sa.nl_groups = RTNLGRP_LINK;
    bind(netlink_fd, (struct sockaddr*)&sa, sizeof(sa));
}
..并根据您的需要接收和处理消息


有一个库可以简化这一过程。

请提供一些代码,说明您至少尝试过做一些事情。如果有任何错误,也要发布。帮助我们帮助你。哪个版本的Ubuntu?这很重要。请提供一些代码,表明您至少尝试过做一些事情。如果有任何错误,也要发布。帮助我们帮助你。哪个版本的Ubuntu?这很重要。