2009-08-26 4 views
3

Ich bin in einer Situation, in der ich extrem bandbreitenbegrenzt bin und den größten Teil der Bandbreite der Übertragung einer Art von Messdaten widmen muss. Manchmal werde ich viele dieser Messdaten aussenden und andere Male werde ich nur darauf warten, dass Ereignisse eintreten (alles über einen TCP-Socket).Linux-Netzwerkschnittstellen-Nutzungsüberwachung in C/C++

Ich möchte in der Lage sein, die gesamte Datenerfassungsdatei (anders als die Messungen) im Hintergrund mit einer Geschwindigkeit zu streamen, die umgekehrt proportional zu der Menge der Messungen ist, die ich zurücksende.

Ich bin auf der Suche nach einer Möglichkeit, zu überwachen, wie viele Bytes die Netzwerkschnittstelle in der gleichen Weise wie der Systemmonitor auf Ubuntu gesendet werden. Der Quellcode für den Systemmonitor basiert auf gnome-Bibliotheken, und da sich mein Programm auf einem eingebetteten Gerät befindet, möchte ich die Anzahl der externen Bibliotheken reduzieren, die ich verwende. Kennt jemand eine Möglichkeit, dies in C/C++ ohne viele zusätzliche Bibliotheken auf einer Standard-Linux-Distribution zu tun?

Antwort

3

Eine der einfachsten Möglichkeiten, um die Datei zu analysieren:/proc/net/dev

-Mine enthält:

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 

Sie könnten dann einen Parser schreiben, die nichts anderes als die C/C++ verwendet Bibliotheken.

1

Verwenden NetLink Buchsen RTNetLink Schnittstellenbuchse, werden sie Ihnen die in struct net_device_stats Format erforderlich bekommen

+0

Haben Sie gute Beispiele dafür? Alle Tutorials, die ich online finden konnte, waren nicht sehr hilfreich ... –

1

Bytes übertragen und empfangen zugänglich über /sys/class/net/eth0/statistics/tx_bytes und /sys/class/net/eth0/statistics/rx_bytes Dateien.

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