Wie komme ich an Hardwareinfos? (Netzwerk, Festplatte, Cpu)



  • n'Abend Leute!

    Bin frisch in C/C++ (bisher 'nur' Bash/Perl) eingestiegen und möchte mich daran machen ein Program zu schreiben was den Rechner ein wenig analysiert.

    Habe bis eben im 'Unix Linux Systemprogrammierung' herum geschnüffelt. Ein sehr gutes Buch doch fand ich nix zu meinem Problem. 😞

    Und zwar brauche ich Infos über Anzahl/Geschwindigkeit der Ethernetkarten, Anzahl/Größe der Festplatten und Anzahl/Virtualisierungsfähigkeit der CPUs.

    Mit der Bash hole ich mir die Infos ohne Probleme. Aber ich will einen Daemonprozess in C/C++ da noch viele andere Aufgaben zu erledigen sind.

    Was sind eure Strategien? Soll ich die Bash aus dem C/C++ Daemon heraus aufrufen und parsen oder gibt es elegantere Methoden?

    Beste Grüße

    Goran



  • Du kannst einfach /proc/cpuinfo parsen, Dir die Ausgabe von lspci holen etc. Und brauchst Du wirklich Anzahl und Größe der Festplatten oder einfach Anzahl und Größe der gemounteten Partitionen?



  • Die meiste Information findest du unter /proc und /sys.

    Für Netzwerkkarten: /sys/class/net
    dort befinden sich sämtliche network devices und alles, was man braucht, um Information aus ihnen zu lesen

    Für Festplatten siehe unter /sys/class/ide und /sys/class/scsi oder du kannst auch andere Information unter /proc/ide und /proc/scsi lesen



  • Danke für eure Antworten, Leute.

    Hab' mich bisher noch nicht ausführlich mit der Materie beschäftigt aber die Informationen aus /proc heraus zu parsen würde ich gerne vermeiden. Das ist nämlich ein Grund meines Umstiegs von den Scriptsprachen zu C/C++.

    Mein erster Versuch ist folgender (damit gebe ich mir die Netzwerkkartennamen an):

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <net/if.h>
    
    int main()
    {
            unsigned int nIfIndex = 22
            char *pIfName = NULL;
    
            pIfName = malloc(IF_NAMESIZE * sizeof(char));
    
            memset(pIfName, 0, IF_NAMESIZE);
    
            if (if_indextoname(nIfIndex, pIfName))
                    printf("Interface %d is %s\n", nIfIndex, pIfName);
    
            free(pIfName);
    
            return 0;
    }
    

    nIfIndex gibt die Nummer Netzwerkkarte an. Könnte man noch durch eine hochzählende Schleife erweitern. Bleibt die Frage wie ich das Protokoll herausbekomme? Ich suche nach Ethernetnics und keine ppp -und lo-nics. Ferner wäre noch interessant wie ich ich eine Wireless-Extension erkenne.

    Für alle Infos dankbar! 😃

    Goran


Anmelden zum Antworten