File: mknod.2

package info (click to toggle)
manpages-de 0.7-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 3,188 kB
  • ctags: 9
  • sloc: makefile: 83; perl: 61
file content (158 lines) | stat: -rw-r--r-- 4,692 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
.\"                               1993 Michael Haardt
.\"                               1993,1994 Ian Jackson.
.\" You may distribute it under the terms of the GNU General
.\" Public Licence.  It comes with NO WARRANTY.
.\"
.\" Übersetzung : Lars J. Brandt <ljbrandt@jorma.ping.de>
.\" Modified Mon Jun 10 12:46:10 1996 by Martin Schulze (joey@linux.de)
.\"
.TH MKNOD 2 "29. März 1994" "Linux 1.0" "Systemaufrufe"
.SH BEZEICHNUNG
mknod \- erstellt eine Spezialdatei
.SH ÜBERBLICK
.nf
.B #include <sys/types.h>
.B #include <sys/stat.h>
.B #include <fcntl.h>
.B #include <unistd.h>
.sp
.BI "int mknod(const char *" pathname ", mode_t " typ ", dev_t " dev );
.fi
.SH BESCHREIBUNG
.B mknod
erstellt eine spezielle Datei (FIFO oder named pipe), eine Gerätedatei
für ein zeichenorientiertes Gerät (character device) oder eine 
Gerätedatei für ein blockorientiertes Gerät (block device) mit dem Namen 
.IR pathname ", spezifiziert durch " typ " und " dev .

.I typ
legt zugleich die Zugriffsrechte und die Art der zu erstellenden Datei
fest.
Es sollte eine Verbindung (mit bitweisem ODER) unter der Verwendung 
der weiter unten angegebenen Typen und den Zugriffsrechten für 
die neue Datei sein.

Die Zugriffsrechte werden normalerweise durch die 
.BR umask
des Prozesses festgelegt; die Zugriffsrechte sind also:
.BR "(typ & ~umask)" .

Hier sind die verschiedenen Typen:
.BR S_IFREG ", " S_IFCHR ", " S_IFBLK " und " S_IFIFO .
Von links nach rechts gelesen ergibt sich als erstes eine normale,
leere Datei, eine Gerätedatei für ein zeichenorientiertes Gerät,
eine Gerätedatei für ein blockorientiertes Gerät und zuletzt
ein FIFO (named pipe).

Bei den Typen 
.BR S_IFCHR " und " S_IFBLK
legt
.I dev
die Major- und die Minor Nummer der neu erzeugten Datei fest.  Bei den 
anderen Typen wird diese Angabe ignoriert.

Die neu erzeugte Datei wird von der effektiven UID des Prozesses,
der sie aufruft, besessen.  Wenn das Verzeichnis in der sich die Datei befindet
aber das SGID-Bit gesetzt hat, oder das Filesystem unter BSD gemountet
ist, erhält die Datei die Gruppenrechte des Verzeichnisses aus dem 
heraus sie aufgerufen wird.
.SH RÜCKGABEWERT 
.BR mknod
meldet bei Erfolg '0', ansonsten wird '-1' zurückgegeben und 
.I errno
entsprechend gesetzt.
.SH FEHLERMELDUNGEN
.TP
.B EPERM
Tritt auf, wenn jemand anderes als der Superuser versucht eine Datei
zu erstellen, die nicht vom Typ FIFO ist.
Kann auch auftreten, wenn das Dateisystem in der die Datei erstellt
werden soll, den angeforderten Dateityp nicht unterstützt.

.TP
.B EINVAL
.IR typ
Es wurde versucht, eine andere Datei als eine normale, eine
Gerätedatei oder eine FIFO zu erstellen.

.TP
.B EEXIST
.IR pathname
Der angegebene Dateiname existiert bereits.
.TP
.B EFAULT
.IR pathname " zeigt auf einen ungültigen Adressbereich. "
.TP
.B EACCES
Das Verzeichnis, aus dem heraus die Datei aufgerufen wurde, erlaubt
keinen Schreibzugriff,
oder eins der Verzeichnisse in
.IR pathname
erlaubt nicht das Ausführen.
.TP
.B ENAMETOOLONG
.IR pathname " war zu lang."
.TP
.B ENOENT
Ein (oder mehrere) Verzeichnisse im Pfad von 
.I pathname
existieren nicht, oder es ist ein defekter symbolischer Link
vorhanden.
.TP
.B ENOTDIR
Ein (oder mehrere) Bestandteile im Pfad von
.I pathname
sind ganz einfach kein Verzeichnis.
.TP
.B ENOMEM
Kein freier Speicher mehr verfügbar.
.TP
.B EROFS
Tritt auf, wenn 
.I pathname
auf einem Read-Only Filesystem liegt, aber trotzdem Schreibzugriff
verlangt.
.TP
.B ELOOP
.I pathname
Dateiname zeigt auf einen anderen Dateinamen, der auf sich selbst
zeigt.
.TP
.B ENOSPC
Das Dateisystem (Device) auf dem
.I dateiname
erstellt werden soll, hat keinen Platz mehr frei.
.SH FEHLER 

In manchen alten Linux-Versionen (z.B. 0.99pl7) erlaubten die
normalen Dateisysteme manchmal die Erstellung von zwei Dateien 
im gleichen Verzeichnis mit gleichem Namen.  Dies trat aber nur selten
- und dann nur in extrem (über)belasteten Systemen auf.

Behoben wurde dieser Fehler schon im Minix-Filesystem im Linux 0.99pl8
pre-release und wurde (hoffentlich) in allen anderen Filsystemen kurz
danach auch ausgebügelt.

.B mknod
kann nicht zur Erstellung von Verzeichnissen oder zur Erzeugung
von Sockets verwendet werden, weiterhin ist es anderen als der Superuserin
nicht möglich, andere Dateien als eine FIFO zu erstellen.

Es gibt auch noch einige Ungereimtheiten im Zusammenhang mit NFS.
.SH SIEHE AUCH
.BR read (2),
.BR write (2),
.BR fcntl (2),
.BR close (2),
.BR unlink (2),
.BR open (2),
.BR mkdir (2),
.BR stat (2),
.BR umask (2),
.BR mount (2),
.BR socket (2),
.BR socket (2),
.BR fopen (3).