Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel 4 Zugriff auf Systeminformationen
  gp 4.1 Informationen aus dem /proc-Verzeichnis herausziehen
  gp 4.2 Hardware-/Systeminformationen ermitteln
    gp 4.2.1 CPU-Informationen – /proc/cpuinfo
    gp 4.2.2 Geräteinformationen – /proc/devices
    gp 4.2.3 PCI-Bus – /proc/pci (nicht 2.6)
    gp 4.2.4 Speicherauslastung – /proc/meminfo
    gp 4.2.5 Weitere Hardware-Informationen zusammengefasst
  gp 4.3 Prozessinformationen
    gp 4.3.1 /proc/$pid/cmdline
    gp 4.3.2 /proc/$pid/environ
    gp 4.3.3 /proc/self
    gp 4.3.4 /proc/$pid/fd/
    gp 4.3.5 /proc/$pid/statm
  gp 4.4 Kernel-Informationen
    gp 4.4.1 /proc/locks
    gp 4.4.2 /proc/modules
  gp 4.5 Filesysteme
    gp 4.5.1 /proc/mounts
  gp 4.6 Weiterführendes

Kapitel 4 Zugriff auf Systeminformationen

Das /proc-(Pseudo-)Filesystem beinhaltet eine Menge Informationen zu Ihrem System. Ob Sie nun Informationen zum aktuellen Prozess, zur Hardware in Ihrem System oder zum Kernel benötigen, all dies finden Sie im /proc-Filesystem.

Da der Kernel den kompletten Rechner verwaltet, besitzt dieser auch eine Menge Informationen zum System, auf dem dieser läuft. Diese Informationen werden vom Kernel in Pseudo-Dateien und Pseudo-Verzeichnissen angelegt. All diese Dateien liegen im /proc-Verzeichnis. Auf die Einträge im /proc-Verzeichnis können Sie wie auf gewöhnliche Dateien zugreifen; meistens allerdings nur lesend. Dieses (Pseudo-)Dateisystem belegt keinerlei Plattenplatz und befindet sich im Hauptspeicher (RAM). Sie können sich gerne einen Überblick zum /proc-Verzeichnis verschaffen.

$ ls -l /proc | less

Auf alle diese Informationen können Sie (fast) ohne weiteres lesend zugreifen. Wollen Sie z. B. den aktuellen Kernel Ihres Systems ermitteln und ausgeben lassen, können Sie auf die Datei /proc/version zugreifen:

$ cat /proc/version
Linux version 2.4.20–4GB (root@Pentium.suse.de)
(gcc version 3.3 20030226 (prerelease) (SUSE Linux)) 
#1 Mon Mar 17 17:54:44 UTC 2003

Oder auf dem System des Fachgutachters:

$ cat /proc/version
Linux version 2.6.4-HX (hirogen2@io.hopto.org) 
(gcc version 3.3.3 (SUSE Linux)) 
#14 Mon May 31 12:13:37 CEST 2004

Schon erhalten Sie die aktuelle Kernel-Version, das Datum, an dem dieser kompiliert wurde, und die Version des zugehörigen Compilers als String zurück.


Hinweis   Die hier vorgestellten Beispiele wurden auf einem Linux-System mit den Kernel-Versionen 2.4 (Version des Autors) und 2.6 (Version des Fachgutachters) getestet – wobei es hier und da einige Unterschiede gibt. Das in 2.5 eingeführte /sys, das langfristig große Teile von /proc ersetzen soll, enthält aber noch nichts Nennenswertes, weshalb darauf nicht weiter eingegangen wird.



Rheinwerk Computing

4.1 Informationen aus dem /proc-Verzeichnis herausziehetoptop

Als Programmierer dürfte Sie in erster Linie interessieren, wie Sie mit Ihrem Programm an diese Informationen kommen. Als Beispiel dient hier die Speicherauslastung des Systems. Hierbei soll lediglich ermittelt werden, wie viel RAM insgesamt auf Ihrem System zur Verfügung steht. Diese Informationen erhalten Sie aus /proc/meminfo:

$ cat /proc/meminfo
total:     used:      free:    shared:  buffers:  cached:
261906432  255688704  6217728  0        26406912  128688128
Swap: 526376960   978944 525398016
MemTotal:       255768 kB
MemFree:          6072 kB
MemShared:           0 kB
Buffers:         25788 kB
Cached:         124724 kB
SwapCached:        948 kB
Active:          76372 kB
Inactive:       140592 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       255768 kB
LowFree:          6072 kB
SwapTotal:      514040 kB
SwapFree:       513084 kB
BigFree:             0 kB

Hinweis   meminfo aus Kernel 2.6 sieht etwas anders aus. Die ersten drei Zeilen fehlen, können aber durch »free -b« kompensiert werden.


Uns interessiert hier der Wert »MemTotal«. Der einfachste Weg, diesen Wert auszulesen, ist es, /proc/meminfo mit fopen() zu öffnen, in einen Puffer einzulesen und nach der Stringfolge »MemTotal« zu suchen. Anschließend kann der Wert mit der sscanf() aus dem Puffer in eine dafür vorgesehene Variable übergeben werden. Hier das mögliche Beispiel:

/* memory.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
static long get_mem_total (void) {
   FILE *fp;
   char buffer[1024];
   size_t bytes_read;
   char *match;
   long mem_tot;
   if((fp = fopen("/proc/meminfo", "r")) == NULL) {
      perror("fopen()");
      exit(EXIT_FAILURE);
   } 
   bytes_read = fread (buffer, 1, sizeof (buffer), fp);
   fclose (fp);
   if (bytes_read == 0 || bytes_read == sizeof (buffer))
      return 0;
   buffer[bytes_read] = '\0';
   /* Suchen nach der Stringfolge "Memtotal" */
   match = strstr (buffer, "MemTotal");
   if (match == NULL) /* Nicht gefunden */
      return 0;   
   sscanf (match, "MemTotal: %ld", &mem_tot);
   return (mem_tot/1024); /* 1MB = 1024KB */
}
int main (void) {
  long memory = get_mem_total();
  if(memory == 0)
     printf("Konnte RAM nicht ermitteln\n");
  else
     printf("Vorhandener Arbeitsspeicher: %ldMB\n" ,memory);
  return EXIT_SUCCESS;
}

Das Programm bei der Ausführung:

$ gcc -o memory memory.c
$ ./memory
Vorhandener Arbeitsspeicher: 249MB

So oder so ähnlich können Sie in der Regel bei allen Informationen vorgehen, die Sie im /proc-Verzeichnis finden und benötigen. Sie sollten allerdings darauf achten, dass sich der Name des Eintrags im /proc-Verzeichnis bei neueren Kernel-Versionen ändern könnte. So könnte vielleicht in absehbarer Zeit aus /proc/meminfo /proc/more_meminfo (nur ein Beispiel) werden. Bedenken Sie dies, wenn Sie Ihr Programm auf dem Stand der Zeit halten wollen.

 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern