C Proc Verzeichnis und deren Dateien (Linux)

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.106
Wie kann ich die Dateien aus dem Proc-Verzeichnis lesen?
Habs versucht mit C-Code auf die Dateien zugrief zu bekommen, aber ich krieg immer wieder eine Fehlermeldung :"Diese Datei existiert nicht!".

Ich brauche einen Zugrief aus dem Userbereich und nicht aus dem Kernel.

Kennt sich da jemand aus?

Danke
 
hiho,

von welchem linux-betriebssystem redest du?

unter debian/ubuntu (und noch auf einigen mehr) lese ich zum beispiel die cpu informationen (die ausgabe ist vielleicht etwas vergleichbar mit der von cpu-z) per befehl cat /proc/cpuinfo aus.
 
Das /proc Verzeichnis kein "echtes" Dateisystem, sondern eine Schnittstelle zum Kernel. Dort werden u. a. auf Prozesse abgebildet. Die Dateien dort nehmen auch keinen Speicherplatz auf einem Datenträger.

Du kannst über das proc-Verzeichnis Zugriff auf Kernel-Parameter bekommen (/proc/sys/), Prozesse auslesen oder Hardware-Informationen erhalten.

cat oder echo sollten hier weiterhelfen.
 
die kannste lesen wie ne echte datei. allerdings solltest du beim open drauf achten, dass du nur lesend zugreifst.
 
Das ist aus einen OpenSuse Kernel.

Ich habe einen Code gefunden was eventuell hilfreich sein kann.

http://www.linuxjournal.com/article/8381

Ja ich weiss dass die Infos in Proc-Verzeichnis nur SymLinks sind. Mein Ziel ist zum Bsp die CPU info auszulesen ohne dass ich ins Kernel muss, da man sich als admin anmelden muss (Ist so ähnlich wie "als Admin ausführen" in Windows).

Werds morgen den Code (oben als Link) genauer durchlesen.
Aber sonst hat keiner ne Ahnung wie mans mit C Proc-Files aufbekommt?

najut, danke vorerst
 
Code:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    FILE * fp;
    char * line = NULL;
    size_t len = 0;
    ssize_t read;

    fp = fopen("/proc/cpuinfo", "r");
    if (fp == NULL)
        exit(EXIT_FAILURE);

    while ((read = getline(&line, &len, fp)) != -1) {
        printf("Read: %s", line);
    }

    if (line)
        free(line);
    exit(EXIT_SUCCESS);
}

Funktioniert als normaler User hervorragend.

/tmp $ uname -a
Linux mybox 2.6.24 #2 SMP Sat Feb 2 23:57:33 CET 2008 i686 Intel(R) Core(TM)2 CPU 6300 @ 1.86GHz GenuineIntel GNU/Linux
 
Zurück
Oben