GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verbindungsgeschwindigkeit programmgesteuert abrufen?

Sie müssen den SIOCETHTOOL verwenden ioctl() aufrufen. Es gibt eine schöne Einführung in den ioctl/SIOCETHTOOL-Aufruf auf LinuxJournal, und der folgende Code (der nicht als Beispiel für gute C-Praktiken gedacht ist!) sollte Ihnen zeigen, wie Sie ihn verwenden können, um die Geschwindigkeit zu erreichen.

#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);
}

Mit sysfs erhalten Sie die Verbindungsgeschwindigkeit in Bit pro Sekunde Schnittstelle:

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

Linux
  1. Wie erhalte ich programmgesteuert die CPU-Cache-Seitengröße in C++?

  2. Übergeordnete PID eines anderen Prozesses programmgesteuert abrufen?

  3. Wie erhalte ich die Anzahl der CPUs in Linux mit C?

  4. Wie bekomme ich den Pfad zur aktuellen Datei (pwd) in Linux von C?

  5. C++ Linux:Holen Sie sich die Aktualisierungsrate eines Monitors

So überprüfen Sie die Verbindungsgeschwindigkeit in Ubuntu 20.04

Wie erhalte ich einen Link der Datei zum Herunterladen mit Wget?

Wie erhalte ich programmgesteuert den freien Speicherplatz für ein Verzeichnis in Linux

So erstellen Sie einen Link zu einem Verzeichnis

So erhalten Sie die CPU-Auslastung

Wie überprüfe ich die Geschwindigkeit meiner Netzwerkkarte?