2009-08-26 7 views
3

Je suis dans une situation où la bande passante est limitée et que je dois consacrer la plus grande partie de la bande passante au transfert d'un type de données de mesure. Parfois, je vais envoyer beaucoup de ces données de mesure et d'autres fois je vais juste attendre que les événements se produisent (tout cela est sur une socket TCP). Je souhaite pouvoir diffuser en continu le fichier de capture de données complet (différent des mesures) en arrière-plan à une vitesse inversement proportionnelle à la quantité de mesures que j'envoie en retour.Surveillance de l'utilisation de l'interface réseau Linux en C/C++

Je cherche un moyen de surveiller combien d'octets sont envoyés sur l'interface réseau à peu près le même que le moniteur du système sur Ubuntu. Le code source du moniteur système repose sur des bibliothèques gnome et puisque mon programme est sur un périphérique embarqué, je voudrais réduire le nombre de bibliothèques externes que j'utilise. Est-ce que quelqu'un sait d'un moyen de faire cela en C/C++ sans beaucoup de bibliothèques supplémentaires sur une distribution Linux standard?

Répondre

3

L'une des façons les plus simples est d'analyser le fichier:/proc/net/dev

mine contient:

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 

Vous pouvez alors écrire un analyseur qui utilise rien d'autre que le C/C++ bibliothèques.

1

utilisation prises NetLink de prise d'interface RTNETLINK, ils vous obtenir le format requis struct net_device_stats

+0

Avez-vous de bons exemples? Tous les tutoriels que j'ai pu trouver en ligne n'étaient pas trop utiles ... –

1

Octets transmis et avons reçu via /sys/class/net/eth0/statistics/tx_bytes accessable et /sys/class/net/eth0/statistics/rx_bytes fichiers.

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