Моя машина UBUNTU имеет два порта сетевого интерфейса. Я хочу написать приложение на C / C++, в котором я могу обнаруживать изменения в сетевом интерфейсе и распечатывать результат.
например Когда подключены два сетевых кабеля, приложение должно распечатать, оба интерфейса подключены. Когда я отсоединяю один кабель, приложение должно удалить всю информацию об этом интерфейсе и распечатать, какой интерфейс не работает, а какой работает.
Какая версия Ubuntu? Это важно.





Вы можете опросить статус ссылок с помощью ioctl():
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, "eth0");
if (ioctl(fd, SIOCGIFFLAGS, &ifr) != -1)
{
up_and_running = (ifr.ifr_flags & ( IFF_UP | IFF_RUNNING )) == ( IFF_UP | IFF_RUNNING );
}
Если вам нужна немедленная информация об изменениях, затем прослушайте сообщения netlink от ядра.
См. Справочную страницу PF_NETLINK (7).
Для создания сокета 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));
}
..И получать и обрабатывать сообщения, как хотите.
Для упрощения есть библиотека libnl.
Пожалуйста, предоставьте код, который показывает, что вы, по крайней мере, пытались что-то сделать. Также опубликуйте любые ошибки, если таковые имеются. Помогите нам помочь вам.