Provided by: manpages-de-dev_0.5-4.1ubuntu1_all bug

BEZEICHNUNG

       intro - Einführung in Systemaufrufe

BESCHREIBUNG

       Dieses Kapitel beschreibt Systemaufrufe unter Linux.

   Direkter Aufruf
       In   den   meisten   Fällen   ist   es  nicht  nötig,  direkt  auf  die
       Systemfunktionen zuzugreifen, aber ab und an stößt man an einen  Punkt,
       an  dem  die Standard C Bibliothek keinen netten Systemaufrufe für Dich
       implementiert hat.

   Übersicht
       #include <linux/unistd.h>

       Das _syscall Makro erzeugt einen Systemaufruf.

   Einrichtung
       Eine wichtige Sache, die man über Systemaufrufe wissen sollte, ist sein
       Prototyp.   Man  muss  die  Anzahl  der Argumente, dessen Typen und den
       Rückgabewert kennen.  Es gibt sechs  Makros,  die  den  Aufruf  in  das
       System einfacher gestalten.  Sie haben die folgende Form:

              _syscallX(type,name,type1,arg1,type2,arg2,...)

                     wobei  X,  von 0-5, die Anzahl der Argumente ist, die der
                             Systemaufruf benötigt,

                     type der Rückgabewert des Systemaufrufs ist,

                     name der Name des Systemaufrufs ist,

                     typeN der Typ des Nten Arguments ist und

                     argN der Name des Nten Arguments ist.

       Diese  Makros  erzeugen  eine  Funktion  name,  mit   den   angegebenen
       Argumenten.    Von   der   Stelle,  an  der  das  _syscall()  Makro  im
       Programmtext verwendet wird, kann der Systemaufruf mit name  aufgerufen
       werden.

BEISPIEL

       #include <stdio.h>
       #include <linux/unistd.h>     /* für _syscallX Macros etc. */
       #include <linux/kernel.h>     /* für das struct sysinfo */

       _syscall1(int, sysinfo, struct sysinfo *, info);

       /* Beachte: Wenn direkt vom nroff Quellcode kopiert wird, müssen die
       zusätzlichen Backslashes in den printf-Anweisungen entfernt werden. */

       int main(void)
       {
            struct sysinfo s_info;
            int error;

            error = sysinfo(&s_info);
            printf("code error = %d\n", error);
               printf("Uptime = %ds\nLoad: 1 min %d / 5 min %d / 15 min %d\n"
                       "RAM: gesamt %d / frei %d / shared %d\n"
                       "Speicher in Puffern = %d\nSwap: gesamt %d / frei %d\n"
                       "Anzahl der Prozesse = %d\n",
                 s_info.uptime, s_info.loads[0],
                 s_info.loads[1], s_info.loads[2],
                 s_info.totalram, s_info.freeram,
                 s_info.sharedram, s_info.bufferram,
                 s_info.totalswap, s_info.freeswap,
                 s_info.procs);
            return(0);
       }

Beispielausgabe

       code error = 0
       uptime = 502034s
       Load: 1 min 13376 / 5 min 5504 / 15 min 1152
       RAM: gesamt 15343616 / frei 827392 / shared 8237056
       Speicher in Puffern = 5066752
       Swap: gesamt 27881472 / frei 24698880
       Anzahl der Prozesse = 40

ANMERKUNGEN

       Die  _syscall()  Makros  erzeugen KEINEN Prototypen.  Diese müssen noch
       extra erzeugt werden, insbesondere, wenn mit C++ gearbeitet wird.

       Systemaufrufe  müssen  nicht  zwingend  nur  positive   oder   negative
       Fehlerwerte zurückgeben.  Um sicher zu sein, welche Werte im Fehlerfall
       zurückgeben werden, muss der Quellcode gelesen  werden.   Normalerweise
       ist das der negative Wert eines Standardfehlercodes, z.B.  -EPERM.  Die
       _syscall() Makros geben das Ergebnis von r  des  Systemaufrufs  zurück,
       wenn  r  nicht  negativ  ist,  oder  -1  und setzen errno auf r, wenn r
       negativ ist.

       Einige  Systemaufrufe,  wie  z.B.   mmap,  benötigen  mehr   als   fünf
       Argumente.   Diese werden besonders behandelt.  Sie werden komplett auf
       den Stack gelegt und ein Zeiger auf diesen Block wird übergeben.

       Wenn ein Systemaufruf definiert wird,  MÜSSEN  die  Argumente  by-value
       oder by-pointer (z.B. für structs) durchgereicht werden.

DATEIEN

       /usr/include/linux/unistd.h

AUTOREN

       Sehen  Sie  bitten  in  den  Kopf  der  jeweiligen  Handbuchseite  nach
       Autor(en) und Copyright-Vermerk. Bitte beachten  Sie,  dass  diese  von
       Seite zu Seite unterschiedlich sein können!