Проверьте программы с открытым исходным кодом, которые делают что-то подобное.
Мой поиск обнаружил небольшой инструмент под названием vnstat .
Он пытается запросить файловую систему / proc, если она доступна, и использует getifaddrs для систем, в которых ее нет. Затем он выбирает правильный интерфейс AF_LINK, выбирает соответствующую структуру if_data и затем считывает переданные и полученные байты, например:
ifinfo.rx = ifd->ifi_ibytes;
ifinfo.tx = ifd->ifi_obytes;
Также помните, что sleep () может спать дольше ровно 1 секунды, поэтому вам, вероятно, следует использовать таймер с высоким разрешением (настенные часы) в своем уравнении - или вы можете углубиться в функции и структуры if, чтобы посмотреть найдите что-нибудь подходящее для вашей задачи.