GNU/Linux >> Linux Esercitazione >  >> Linux

Ottieni velocità di collegamento a livello di codice?

Devi usare il SIOCETHTOOL chiamata ioctl(). C'è una bella introduzione alla chiamata ioctl/SIOCETHTOOL su LinuxJournal, e il codice qui sotto (che non intende essere un esempio di buone pratiche C!) dovrebbe mostrarti come usarlo per ottenere la velocità.

#include <stdio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/if.h>
#include <linux/ethtool.h>
#include <string.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
    int sock;
    struct ifreq ifr;
    struct ethtool_cmd edata;
    int rc;

    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (sock < 0) {
        perror("socket");
        exit(1);
    }

    strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
    ifr.ifr_data = &edata;

    edata.cmd = ETHTOOL_GSET;

    rc = ioctl(sock, SIOCETHTOOL, &ifr);
    if (rc < 0) {
        perror("ioctl");
        exit(1);
    }
    switch (ethtool_cmd_speed(&edata)) {
        case SPEED_10: printf("10Mbps\n"); break;
        case SPEED_100: printf("100Mbps\n"); break;
        case SPEED_1000: printf("1Gbps\n"); break;
        case SPEED_2500: printf("2.5Gbps\n"); break;
        case SPEED_10000: printf("10Gbps\n"); break;
        default: printf("Speed returned is %d\n", edata.speed);
    }

    return (0);
}

Puoi ottenere la velocità del collegamento in bit al secondo usando sysfs interfaccia:

cat /sys/class/net/eth0/speed
1000

Linux
  1. Documentazione ObjectRocket

  2. Come ottenere a livello di codice la dimensione della pagina della cache della CPU in C++?

  3. Ottieni l'ID del sottoprocesso in Java

  4. Ottieni l'indirizzo IP di un'interfaccia su Linux

  5. Come ottenere informazioni sul fornitore e sul prodotto USB a livello di codice su Linux?

Come controllare la velocità di collegamento in Ubuntu 20.04

Hai l'automazione? Ecco una guida rapida per aggiornarti su Ansible

Come ottenere il collegamento del file da scaricare con Wget?

Come ottenere una velocità di clock della CPU ARM in Linux?

Ottieni la velocità di collegamento di un adattatore di rete virtio-net

Come posso verificare la velocità della mia NIC?