Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何计算传输和接收的网络利用率_C_Linux_Bash_Embedded Linux - Fatal编程技术网

C 如何计算传输和接收的网络利用率

C 如何计算传输和接收的网络利用率,c,linux,bash,embedded-linux,C,Linux,Bash,Embedded Linux,如何使用C或shell脚本计算传输和接收的网络利用率 我的系统是嵌入式linux。我当前的方法是记录接收到的字节(b1),等待1秒,然后再次记录(b2)。然后知道链路速度,我计算使用的接收带宽的百分比 接收利用率=((b2-b1)*8)/链路速度)*100 有更好的方法吗?看看做类似事情的开源程序 我的搜索发现了一个叫做 它尝试查询/proc文件系统(如果可用),并用于没有该文件系统的系统。然后它获取正确的AF_链接接口,获取相应的if_数据结构,然后读取发送和接收的字节,如下所示: ifinf

如何使用C或shell脚本计算传输和接收的网络利用率

我的系统是嵌入式linux。我当前的方法是记录接收到的字节(b1),等待1秒,然后再次记录(b2)。然后知道链路速度,我计算使用的接收带宽的百分比

接收利用率=((b2-b1)*8)/链路速度)*100


有更好的方法吗?

看看做类似事情的开源程序

我的搜索发现了一个叫做

它尝试查询/proc文件系统(如果可用),并用于没有该文件系统的系统。然后它获取正确的AF_链接接口,获取相应的if_数据结构,然后读取发送和接收的字节,如下所示:

ifinfo.rx = ifd->ifi_ibytes;
ifinfo.tx = ifd->ifi_obytes;

还要记住,sleep()的睡眠时间可能超过1秒,因此您可能应该在等式中使用高分辨率(挂钟)计时器——或者您可以深入研究if函数和结构,看看是否找到适合您的任务的任何东西。

感谢“csl”为我指出了vnstat的方向。这里使用vnstat示例是如何计算网络利用率的

#define FP32 4294967295ULL
#define FP64 18446744073709551615ULL
#define COUNTERCALC(a,b) ( b>a ? b-a : ( a > FP32 ? FP64-a-b : FP32-a-b))
int sample_time = 2; /* seconds */
int link_speed = 100; /* Mbits/s */
uint64_t rx, rx1, rx2;
float rate;

/* 
 * Either read:
 * '/proc/net/dev' 
 * or 
 * '/sys/class/net/%s/statistics/rx_bytes'
 * for bytes received counter
 */

rx1 = read_bytes_received("eth0"); 
sleep(sample_time); /* wait */
rx2 = read_bytes_received("eth0");

/* calculate MB/s first the convert to Mbits/s*/
rx = rintf(COUNTERCALC(rx1, rx2)/(float)1048576);
rate = (rx*8)/(float)sample_time;

percent = (rate/(float)link_speed)*100;

为什么要用(b2-b1)乘以8?@csl:我想链接速度将以比特秒为单位,这就是为什么要将字节更改为bits@Aviator也许吧,但它应该已经嵌入到常量链接中了_speed@csl:是的,他可以把它作为链接(以字节/秒为单位)太好了我只是在调查:)vnstat-看起来很有希望,我会调查一下。