2009-08-26 14 views
3

私は非常に帯域幅が限られており、1種類の測定データを転送するためにほとんどの帯域幅を費やさなければならない状況にあります。時々私はこの測定データをたくさん送信し、イベントが発生するのを待っているだけです(これはすべてTCPソケットを介して行われます)。C/C++でのLinuxネットワークインターフェイスの使用状況の監視

返信した測定量に反比例する速度でバックグラウンドで(測定値とは異なる)完全なデータキャプチャファイルをストリーミングできるようにしたいと考えています。

私はUbuntuのシステムモニタと同じくらい多くのバイトがネットワークインターフェイスから送信されているのを監視する方法を探しています。システムモニタのソースコードはgnomeライブラリに依存しています。私のプログラムは組み込みデバイス上にあるので、私が使用する外部ライブラリの数を減らしたいと思います。標準的なLinuxディストリビューションに多くのライブラリを追加することなく、C/C++でこれを行う方法を知っている人はいますか?

答えて

3

最も簡単な方法の一つは、ファイルを解析することです:/ procの/ネット/ 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以外の何を使用しないパーサを書くことができ++ライブラリ。

1
RTNetLinkインタフェースソケットの

使用NetLinkのソケット、彼らはあなたの /sys/class/net/eth0/statistics/tx_bytes/sys/class/net/eth0/statistics/rx_bytesファイルを経由して送信され、アクセス可能に受け取った構造体net_device_stats形式で必要な

+0

これの良い例がありますか?私がオンラインで見つけることができるチュートリアルは、あまり役に立ちませんでした... –

1

バイトを取得します。

$ cat /sys/class/net/net1/statistics/rx_bytes 
1055448 
関連する問題