GNU/Linux >> Belajar Linux >  >> Linux

Dapatkan kecepatan tautan secara terprogram?

Anda perlu menggunakan SIOCETHTOOL panggilan ioctl(). Ada pengantar yang bagus untuk panggilan ioctl/SIOCETHTOOL di LinuxJournal, dan kode di bawah ini (yang tidak dimaksudkan sebagai contoh praktik C yang baik!) akan menunjukkan cara menggunakannya untuk mendapatkan kecepatan.

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

Anda bisa mendapatkan kecepatan tautan dalam bit per detik menggunakan sysfs antarmuka:

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

Linux
  1. Dokumentasi ObjectRocket

  2. Bagaimana cara secara terprogram mendapatkan ukuran halaman cache CPU di C++?

  3. Dapatkan id subproses di Jawa

  1. Dapatkan alamat IP dari sebuah antarmuka di Linux

  2. Bagaimana cara saya secara terprogram mendapatkan ruang disk kosong untuk direktori di Linux

  3. Cara mendapatkan penggunaan CPU

  1. Bagaimana cara mendapatkan path ke file saat ini (pwd) di Linux dari C?

  2. C++ Linux:Dapatkan kecepatan refresh monitor

  3. Dapatkan nama fungsi di pustaka bersama secara terprogram