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


Rheinwerk Computing

4.2 Hardware-/Systeminformationen ermitteldowntop

Viele Einträge im /proc-Filesystem erlauben Ihnen, Informationen zur Hardware des Systems zu ermitteln. Das sind interessante Informationen für Systemadministratoren und auch für den Programmierer von Programmen. Hier einige häufig verwendete Einträge im Überblick.


Hinweis   Bei diesem Buch handelt es sich nicht um ein Buch zur Erklärung von Hardware. Sollten Sie keinerlei Kenntnisse vom Innenleben Ihres PC haben, dann wäre zusätzliche Literatur recht sinnvoll.



Rheinwerk Computing

4.2.1 CPU-Informationen – /proc/cpuinfo  downtop

/proc/cpuinfo beinhaltet Informationen zur CPU (Prozessor) oder zu den CPUs, die auf Ihrem System laufen. Ausgegeben wird dabei die Anzahl der Prozessoren. Ist der Wert von »processor« wie im Beispiel 0, so kann dies bedeuten, dass es sich um ein Single-Prozessor-System handelt.


Hinweis   Auf SMP (Multi-CPU-Maschinen) ist der Wert von processor ... nicht direkt 0, sondern es wird für jeden Prozessor einzeln »processor, vendor_id« etc. angezeigt, weshalb »auf 0 gesetzt« nicht ganz korrekt ist.


Weitere Daten finden Sie zu der CPU-Familie, dem Modell, der Frequenz, der Revision und noch einigem mehr. Hierzu ein Ausschnitt aus meinem System:

$ cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 2
model name      : Intel(R) Pentium(R) 4 CPU 1.60GHz
stepping        : 4
cpu MHz         : 1594.865
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat 
                  pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips        : 3185.04

Oder aus dem System des Fachgutachters:

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 8
model name      : AMD Athlon(tm) XP 2000+
stepping        : 0
cpu MHz         : 1667.065
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat 
                  pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow
bogomips        : 3301.37
avloops/sec     : 824435500

Für mehr Informationen zur CPU sei die Dokumentation zu cpuid des Intel Architecture Software Developers Manual, Volume 2, empfohlen.


Rheinwerk Computing

4.2.2 Geräteinformationen – /proc/devices  downtop

Hier sind Informationen zu allen verfügbaren Geräten (zeichen- und blockorientiert) wie der Festplatte, dem Diskettenlaufwerk, der seriellen und parallelen Schnittstelle usw. aufgelistet.


Rheinwerk Computing

4.2.3 PCI-Bus – /proc/pci (nicht 2.6)  downtop

Die /proc/pci-Datei liefert eine umfangreiche Zusammenfassung der Geräte am PCI-Bus. Dies sind häufig Karten wie die Soundkarte, Netzwerkkarten oder fest eingebaute Geräte wie Modems auf dem Mainboard. Ebenfalls aufgelistet wird dabei die AGP-Grafikkarte. Das Auslesen des PCI-Busses oder der PCI-Busse wird häufiger zur Diagnose bei Problemen mit PCI-Karten verwendet.


Rheinwerk Computing

4.2.4 Speicherauslastung – /proc/meminfo  downtop

(S. o. unter 4.1.) In dieser Pseudo-Datei kann der aktuelle Speicherstatus ausgelesen werden. Angezeigt werden der vorhandene und der belegte Speicher (sowohl der physikalische als auch der Swap-Speicher). Ebenfalls lässt sich ermitteln, wie viel davon für geteilten Speicher (Shared Memory), Puffer und Caches belegt ist, die der Kernel benutzt.


Rheinwerk Computing

4.2.5 Weitere Hardware-Informationen zusammengefasst  toptop

Es gibt natürlich noch eine Menge mehr Informationen zur Hardware im /proc-Verzeichnis, die allerdings zum Teil auch von der Konfiguration des Systems abhängt. Hierzu eine kleine Zusammenfassung zu weiteren gängigen Einträgen im /proc-Verzeichnis.


Tabelle 4.1    Systeminformationen im /proc-Verzeichnis

Verzeichniseintrag Bedeutung
/proc/dma Liste von belegten DMA-Kanälen, die für einen Treiber reserviert sind, und der Name des Treibers
/proc/interrupts Liste der benutzten Interrupts mit Anzahl der passierten Interrupts seit Systemstart, Typ des Interrupts und Angabe, durch welche Module dieser Interrupt verwendet wird
/proc/ioports Eine Liste aller belegten IO-Ports für die Ein-/Ausgabe wie die Festplatte, Ethernet, Soundkarte, Modem, USB etc. (gemappte Hardware-Speicherbereiche finden sich in /proc/iomem).
/proc/stat Allgemeine Informationen über den Status der Prozessoren. Diese Informationen werden vom Programm procinfo verwendet und übersichtlich aufgelistet.
/proc/uptime Anzahl der Sekunden, seitdem das System gestartet ist, und wie lange davon die CPU mit dem Nichtstun (HLT) (Leerlaufzeit = engl. idle) verbracht hat
/proc/scsi/ Unterverzeichnis mit Informationen zu SCSI-Geräten
/proc/scsi/scsi Sofern Sie eine SCSI-Schnittstelle besitzten, finden Sie hier eine Auflistung aller Geräte.
/proc/ide/ Unterverzeichnis mit Informationen zu IDE-Geräten
/proc/apm Informationen zum Advanced Power Management (z. B. ein Text wie »AC offline« bedeutet, dass ein Notebook im Batteriebetrieb läuft)
/proc/mounts Liste aller »gemounteten« Dateisysteme
/proc/net/ Unterverzeichnis zu Netzwerkinformationen
/proc/loadavg Duchschnittliche Systemauslastung (eine Minute, drei Minuten, fünf Minuten, aktive Prozesse/Anzahl Prozesse, und zuletzt benutzte PID)

Das folgende Listing soll Ihnen jetzt demonstrieren, wie einfach es ist, aus dem System nützliche Informationen zur Hardware ausgeben zu lassen. Das Beispiel stellt eine einfache Schnittstelle dar, die es zu erweitern gilt. Damit haben Sie schon die Grundlage für ein Systemprogramm zur Hand. Sollte es ein Konsolenprogramm werden, dann müssten Sie die Ausgabe benutzerfreundlich anpassen; ebenfalls dann, wenn Sie nur einzelne Informationen ausgeben wollen. Natürlich können Sie über das Programm auch ein grafisches Frontend ziehen. Denn auch die Systemprogramme von KDE oder GNOME machen nichts anderes, als die Daten aus dem /proc-Filesystem zu lesen und entsprechend auszugeben.

/* myinfo.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#define BUF 4096 /* Anpassen */
enum {
   CPU, DEV, DMA, INT, IOP, MEM, PCI, VERS, SCSI, EXIT 
};
static const char *info[] = {
   "/proc/cpuinfo", "/proc/devices", "/proc/dma",
   "/proc/interrupts", "/proc/ioports", "/proc/meminfo",
   "/proc/pci", "/proc/version", "/proc/scsi/scsi"
 };
static void get_info (const int inf) {
   FILE *fp;
   char buffer[BUF];
   size_t bytes_read;
   
   if((fp = fopen(info[inf], "r")) == NULL) {
      perror("fopen()");
      return; 
   }
   bytes_read = fread (buffer, 1, sizeof (buffer), fp);
   fclose (fp);
   if (bytes_read == 0 || bytes_read == sizeof (buffer))
      return;
   buffer[bytes_read] = '\0';
    
   printf("%s",buffer);
   printf("Weiter mit ENTER");
   getchar();   
   return;
}
int main (void) {   
   int auswahl;
   do {
      printf("Wozu benötigen Sie Informationen?\n\n");
      printf("-%d- Prozessor\n", CPU);
      printf("-%d- Geräte\n", DEV);
      printf("-%d- DMA\n", DMA);
      printf("-%d- Interrupts\n", INT);
      printf("-%d- I/O-Ports\n", IOP);
      printf("-%d- Speicher\n", MEM);
      printf("-%d- PCI-Bus\n", PCI);
      printf("-%d- Version\n", VERS);
      printf("-%d- SCSI\n", SCSI);
      printf("-%d- Programmende\n", EXIT);
      printf("\nIhre Auswahl : ");
      do{ scanf("%d",&auswahl); } while(getchar() != '\n'); 
  
      switch(auswahl) {
         case CPU : get_info(CPU);   break;
         case DEV : get_info(DEV);   break;
         case DMA : get_info(DMA);   break;
         case INT : get_info(INT);   break;
         case IOP : get_info(IOP);   break;
         case MEM : get_info(MEM);   break;
         case PCI : get_info(PCI);   break;
         case VERS: get_info(VERS);  break;
         case SCSI: get_info(SCSI);  break;
         case EXIT: printf("Bye\n"); break;
         default  : printf("Falsche Eingabe?\n");
      }
   } while(auswahl != EXIT);
   return EXIT_SUCCESS;
}

Das Programm im Einsatz:

$ gcc -o myinfo myinfo.c
$ ./myinfo
Wozu benötigen Sie Informationen?
 
-0- Prozessor
-1- Geräte
-2- DMA
-3- Interrupts
-4- I/O-Ports
-5- Speicher
-6- PCI-Bus
-7- Version
-8- SCSI
-9- Programmende
 
Ihre Auswahl : 8
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: TOSHIBA  Model: DVD-ROM SD-R2102 Rev: 1316
  Type:   CD-ROM                           ANSI SCSI revision: 02
Weiter mit ENTER
...

Hinweis   Fragen zum Löschen des Bildschirms in einem Terminal finden Sie im entsprechenden Kapitel (Terminal I/O).


 << 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