c++ - linux自带流量统计计数溢出的问题
阿神
阿神 2017-04-17 16:19:36
0
2
507

本人自己写了一个程序,能够让QT在树莓派B+上通过FrameBuffer输出到一块LCD上显示一些树莓派的运行信息(以上都不是重点),其中有个内容就是网卡的上下载流量,用来推断出下载机的工作状态(aria2的那个json-rpc不想连了,也没有地方显示过多的信息),现在的解决方案就是用QFile打开linux自身带的一个网卡的流量统计文件,叫/proc/net/dev,然后从里边切出来想要的数据.后来发现一个很蛋疼的问题,每次传输数据量(上传下载单算)超过4GB(2^32Byte,好巧哦,我家Int也这范围)就会导致溢出然后从新计数,本来以为是我程序里变量开小了,后来才发现,原来是linux的变量开小了.
那天我专门从树莓派上下载一个大文件,然后用命令行盯着这个文件,显示屏上的数字一归零,立刻

cat /proc/net/dev

然后惊奇的发现upload的字节数已经因为溢出重新计数了.....
不知道这个蛋疼的问题能否解决,所以来此问问大神们的观点,另外对那些常年不关的linux服务器是如何低资源消耗地统计流量(第三方的能不考虑就尽量不考虑)这个问题.

阿神
阿神

闭关修行中......

全員に返信(2)
迷茫

簡単な方法はカーネルを変更することです。これについてはこのファイルで詳しく説明されています。
include/linux/netdevice.h
ただし、これらはバイナリ互換性を壊します。
したがって、別の方法は、最初から開始して、カーネル モジュールを独自にカウントし、long long unsigned ストレージを使用するように作成することです。
それでは、IP リンクを使用してみてはいかがでしょうか。 。 。 。 ifla_stats64 を使用すると、ip リンクは 64 ビット カウンターを直接読み取ることができます。 。 。 。

いいねを押す +0
左手右手慢动作

シンプル、ゼロリセットカウンターを使用してオーバーフローの数を記録し、合計フロー = 2^32 * ゼロリセットの数 + 現在の値

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート