Зарегистрируйтесь в DeviceManager Linux

Я прочитал здесь несколько вопросов, но не смог найти конкретную проблему, с которой столкнулся здесь ...

Мне нужно реализовать «DeviceCache» в конкретном проекте, который кэширует все имена устройств, найденные в / proc / net / dev. Язык - C / ++

Поэтому я подумал об отдельном потоке, просматривающем каждые X секунд в каталоге, упомянутом выше, но мне было предложено найти более прямой путь. Как я могу зарегистрировать метод моего процесса в диспетчере устройств Linux? Есть ли аналогичный способ как события / сигналы?

Я искал на других сайтах, но не нашел полезного кода ... Я относительно новичок в программировании под Linux, но готов изучать новое :)


person Ahnihmuhs    schedule 23.09.2011    source источник
comment
Зачем вы кешируете что-то подобное? Чтение файла, вероятно, будет достаточно быстрым. Чего вы действительно пытаетесь достичь?   -  person bdonlan    schedule 24.09.2011
comment
DeviceCache будет использоваться инфраструктурой сокетов, чтобы использовать быстрое устройство для связи. Поэтому, если одно из устройств отключено, система должна заменить устройство на второе быстрое.   -  person Ahnihmuhs    schedule 24.09.2011
comment
/proc/net/dev не предоставляет информацию, связанную с медиа   -  person bdonlan    schedule 24.09.2011
comment
Доступен ли NetworkManager в выбранном вами дистрибутиве?   -  person bdonlan    schedule 24.09.2011
comment
но в нем перечислены все подключенные / установленные устройства, такие как eth, wlan и ppp, которые я использую для подключения к другому сокету. Или я неправильно понял этот файл? PS: поскольку этот код должен работать во встроенных системах, я не могу установить какие-либо другие библиотеки в качестве стандартных в Linux, поэтому я предполагаю, что NetworkManager также не установлен   -  person Ahnihmuhs    schedule 24.09.2011
comment
@Ahnihmuhs, / proc / net / dev перечисляет все зарегистрированные интерфейсы. Это включает в себя те, где кабель отключен, или где они отключены, или где это программные интерфейсы (например, pppN), которые не настроены ...   -  person bdonlan    schedule 24.09.2011
comment
Если вы действительно хотите пойти по этому пути - вы можете использовать inotify (en.wikipedia.org/wiki/Inotify), чтобы следить за изменениями, чтобы предотвратить опрос.   -  person Atmocreations    schedule 24.09.2011
comment
ааа, ладно, но это не проблема, мне просто нужно обновлять кеш каждый раз, когда (новый) интерфейс регистрируется / не регистрируется, независимо от фактической надежности работы: S Да, это звучит странно, но это мое задание: ‹   -  person Ahnihmuhs    schedule 24.09.2011


Ответы (1)


Основываясь на ваших комментариях, вы действительно хотите отслеживать, какие сетевые интерфейсы работают в любой момент времени.

Единственный верный способ определить, работает ли сетевой интерфейс, - это проверить его - в конце концов, маршрутизатор на другом конце может не работать. Например, вы можете периодически отправлять эхо-запросы.

Однако, если вы просто хотите узнать, выходит ли из строя носитель (т. Е. Сетевой кабель отключен), взгляните на эти вопросы SO:

Если вы просто хотите получать уведомления о фактической регистрации интерфейсов на аппаратном уровне (например, когда подключен USB-адаптер), вы можете использовать события udev, если на вашей платформе есть udev; в противном случае я считаю, что есть еще одна категория netlink для событий добавления / удаления оборудования.

person bdonlan    schedule 23.09.2011
comment
спасибо за ответ, я просто использовал неправильный термин для поиска своей проблемы, большое спасибо: › - person Ahnihmuhs; 24.09.2011