C++ C/C+中的Linux网络接口使用监控+;

C++ C/C+中的Linux网络接口使用监控+;,c++,networking,monitoring,C++,Networking,Monitoring,我的情况是,我的带宽非常有限,必须将大部分带宽用于传输一种类型的测量数据。有时我会发送大量的测量数据,而其他时候我只会等待事件发生(所有这些都是通过TCP套接字进行的) 我希望能够在后台以与我发送回的测量量成反比的速度输出完整的数据捕获文件(与测量值不同) 我正在寻找一种方法来监控有多少字节被发送到网络接口,就像Ubuntu上的系统监视器一样。系统监视器的源代码依赖于gnome库,由于我的程序在嵌入式设备上,我希望减少使用的外部库的数量。有人知道在标准Linux发行版上没有许多附加库的情况下在C

我的情况是,我的带宽非常有限,必须将大部分带宽用于传输一种类型的测量数据。有时我会发送大量的测量数据,而其他时候我只会等待事件发生(所有这些都是通过TCP套接字进行的)

我希望能够在后台以与我发送回的测量量成反比的速度输出完整的数据捕获文件(与测量值不同)


我正在寻找一种方法来监控有多少字节被发送到网络接口,就像Ubuntu上的系统监视器一样。系统监视器的源代码依赖于gnome库,由于我的程序在嵌入式设备上,我希望减少使用的外部库的数量。有人知道在标准Linux发行版上没有许多附加库的情况下在C/C++中实现这一点的方法吗?

最简单的方法之一是解析文件:/proc/net/dev

地雷包括:

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:   44865    1431    0    0    0     0          0         0    44865    1431    0    0    0     0       0          0
  eth0:150117850  313734    0    0    0     0          0         0 34347178  271210    0    0    0     0       0          0
  pan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

然后,您可以编写一个只使用C/C++库的解析器。

使用RTNetLink接口套接字的NetLink套接字,它们将为您提供所需的结构net_device_stats格式

字节,通过
/sys/class/net/eth0/statistics/tx_bytes
/sys/class/net/eth0/statistics/rx_bytes
文件

$ cat /sys/class/net/net1/statistics/rx_bytes 
1055448

你有这方面的好例子吗?我能在网上找到的所有教程都没有太大帮助…最大(溢出)值是多少?
net\u device\u stats->rx\u bytes
是无符号长的,但我的wifi适配器上现在有30583530698(64位)。此值取决于驱动程序实现。因此,64位arch上的
2^64-1
和32位arch上的
2^32-1