LINUX.ORG.RU

Циклический парсинг файла /proc/net/dev


0

0

Циклически один раз в секунду необходимо получать данные сетевого интерфейса
о переданных байтах. Как лучше это делать?

Ничего лучше того, что каждый раз открывать файл, парсить и закрывать
в голову не приходит.
★★★★★

А что тут плохого? Раз в секунду - это немного.

anonymous
()

Открывать и закрывать можно один раз. Ну и парсить раз в секунду - это не нагрузка.

execve
()

открыл - и парсишь сколько тебе надо раз в секунду - потом закрыл.

открытие файла емкая процедура - не стоит это делать каждый раз.

alphex_kaanoken ★★★
()

Коллеги! Имею несколько другое предложение.

Вряд ли может быть чтоб такие данные были доступно исключительно посредством парсинга /proc. Навскидку глянув в хидеры, нашёл в /usr/include/linux/netdevice.h структуру struct net_device_stats, где всё это добро хранит кернел.

Имхо, есть какой-то ioctl, применяемый, например, к __однократно__ открытому сокету, по которому эту структуру можно заполучить.

Если есть struct ifreq с некоторыми данными по интерфейсу, доступными по ioctl'у (не раз пользовал), то думаю, struct net_device_stats не будет исключением.

Где искать синтаксис и сам ioctl?

1. Трудновато, но надёжно - в сырцах кернела.

2. Легче - в сырцах ifconfig (он выводит подобную статистику). Но может статься он сам /proc/net/dev парсит.

Удачи!

farisey
()
Ответ на: комментарий от farisey

в позиксе есть if_nameindex

есть и ioctl называется как-то типа IF_CONF_*

Но они возвращают только поднятые интерфейсы -- это фича линукса.

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.