Imported tab->space correction by redhat
[infodrom/manpages-de] / man2 / intro.2
1 .\" Copyright (c) 1993 Michael Haardt <u31b3hs@pool.informatik.rwth-aachen.de>, Fri Apr  2 11:32:09 MET DST 1993
2 .\"
3 .\" This is free documentation; you can redistribute it and/or
4 .\" modify it under the terms of the GNU General Public License as
5 .\" published by the Free Software Foundation; either version 2 of
6 .\" the License, or (at your option) any later version.
7 .\"
8 .\" The GNU General Public License's references to "object code"
9 .\" and "executables" are to be interpreted as the output of any
10 .\" document formatting or typesetting system, including
11 .\" intermediate and printed output.
12 .\"
13 .\" This manual is distributed in the hope that it will be useful,
14 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
15 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 .\" GNU General Public License for more details.
17 .\"
18 .\" You should have received a copy of the GNU General Public
19 .\" License along with this manual; if not, write to the Free
20 .\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
21 .\" USA.
22 .\"
23 .\" Tue Jul  6 12:42:46 MDT 1993 (dminer@nyx.cs.du.edu)
24 .\" Added "Calling Directly" and supporting paragraphs
25 .\"
26 .\" Modified Sat Jul 24 15:19:12 1993 by Rik Faith (faith@cs.unc.edu)
27 .\"
28 .\" Modified 21 Aug 1994 by Michael Chastain (mec@shell.portal.com):
29 .\"   Added explanation of arg stacking when 6 or more args.
30 .\"
31 .\" Modified 10 June 1995 by Andries Brouwer (aeb@cwi.nl)
32 .\" Translated into german by Martin Schulze (joey@infodrom.north.de)
33 .\"
34 .TH INTRO 2 "22. Mai 1996" "Linux" "Systemaufrufe"
35 .SH BEZEICHNUNG
36 intro \- Einführung in Systemaufrufe
37 .SH BESCHREIBUNG
38 Dieses Kapitel beschreibt Systemaufrufe unter Linux.
39 .SS "Direkter Aufruf"
40 In den meisten Fällen ist es nicht nötig, direkt auf die Systemfunktionen
41 zuzugreifen, aber ab und an stößt man an einen Punkt, an dem die
42 Standard C Bibliothek keinen netten Systemaufrufe für Dich
43 implementiert hat.
44 .SS "Übersicht"
45 .B #include <linux/unistd.h>
46
47 Das _syscall Makro erzeugt einen Systemaufruf.
48
49 .SS Einrichtung
50 Eine wichtige Sache, die man über Systemaufrufe wissen sollte, ist
51 sein Prototyp.  Man muss die Anzahl der Argumente, dessen Typen
52 und den Rückgabewert kennen.  Es gibt sechs Makros, die den Aufruf in
53 das System einfacher gestalten.  Sie haben die folgende Form:
54 .sp
55 .RS
56 .RI _syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...)
57 .RS
58 .HP
59 wobei 
60 .IR X ,
61 von 0\-5, die Anzahl der Argumente ist, die der
62 Systemaufruf benötigt,
63 .HP
64 .I type
65 der Rückgabewert des Systemaufrufs ist,
66 .HP
67 .I name
68 der Name des Systemaufrufs ist,
69 .HP
70 .I typeN
71 der Typ des Nten Arguments ist und
72 .HP
73 .I argN
74 der Name des Nten Arguments ist.
75 .RE
76 .RE
77 .sp
78 Diese Makros erzeugen eine Funktion
79 .IR name ,
80 mit den angegebenen Argumenten.  Von der Stelle, an der das _syscall()
81 Makro im Programmtext verwendet wird, kann der Systemaufruf mit
82 .I name
83 aufgerufen werden.
84
85 .SH BEISPIEL
86 .nf
87 .sp
88 #include <stdio.h>
89 #include <linux/unistd.h>       /* für _syscallX Macros etc. */
90 #include <linux/kernel.h>       /* für das struct sysinfo */
91
92 _syscall1(int, sysinfo, struct sysinfo *, info);
93
94 /* Beachte: Wenn direkt vom nroff Quellcode kopiert wird, müssen die
95 zusätzlichen Backslashes in den printf-Anweisungen entfernt werden. */
96
97 int main(void)
98 {
99         struct sysinfo s_info;
100         int error;
101
102         error = sysinfo(&s_info);
103         printf("code error = %d\\n", error);
104         printf("Uptime = %ds\\nLoad: 1 min %d / 5 min %d / 15 min %d\\n"
105                 "RAM: gesamt %d / frei %d / shared %d\\n"
106                 "Speicher in Puffern = %d\\nSwap: gesamt %d / frei %d\\n"
107                 "Anzahl der Prozesse = %d\\n",
108                 s_info.uptime, s_info.loads[0],
109                 s_info.loads[1], s_info.loads[2],
110                 s_info.totalram, s_info.freeram,
111                 s_info.sharedram, s_info.bufferram,
112                 s_info.totalswap, s_info.freeswap,
113                 s_info.procs);
114         return(0);
115 }
116 .fi
117 .SH "Beispielausgabe"
118 .nf
119 code error = 0
120 uptime = 502034s
121 Load: 1 min 13376 / 5 min 5504 / 15 min 1152
122 RAM: gesamt 15343616 / frei 827392 / shared 8237056
123 Speicher in Puffern = 5066752
124 Swap: gesamt 27881472 / frei 24698880
125 Anzahl der Prozesse = 40
126 .fi
127 .SH ANMERKUNGEN
128 Die _syscall() Makros erzeugen KEINEN Prototypen.  Diese müssen noch
129 extra erzeugt werden, insbesondere, wenn mit C++ gearbeitet wird.
130 .sp
131 Systemaufrufe müssen nicht zwingend nur positive oder
132 negative Fehlerwerte zurückgeben.  Um sicher zu sein, welche
133 Werte im Fehlerfall zurückgeben werden, muss der Quellcode gelesen
134 werden.  Normalerweise ist das der negative Wert eines
135 Standardfehlercodes, z.B.
136 .BR \-EPERM .
137 Die _syscall() Makros geben das Ergebnis von
138 .I r
139 des Systemaufrufs zurück, wenn
140 .I r
141 nicht negativ ist, oder \-1 und setzen
142 .IR errno " auf " r ,
143 wenn
144 .I r
145 negativ ist.
146 .sp
147 Einige Systemaufrufe, wie z.B.
148 .BR mmap ,
149 benötigen mehr als fünf Argumente.  Diese werden besonders
150 behandelt.  Sie werden komplett auf den Stack gelegt und ein Zeiger
151 auf diesen Block wird übergeben.
152 .sp
153 Wenn ein Systemaufruf definiert wird, MÜSSEN die Argumente by-value
154 oder by-pointer (z.B. für structs) durchgereicht werden.
155 .SH DATEIEN
156 .I /usr/include/linux/unistd.h
157 .SH AUTOREN
158 Sehen Sie bitten in den Kopf der jeweiligen Handbuchseite nach
159 Autor(en) und Copyright-Vermerk. Bitte beachten Sie, dass diese von
160 Seite zu Seite unterschiedlich sein können!
161