mknod(2) mknod(2)
NAME
mknod - Verzeichnis, Gerätedatei oder normale Datei erstellen
SYNTAX
#include <sys/types.h>
#include <sys/stat.h>
int mknod(const char *path, modet mode, devt dev);
BESCHREIBUNG
mknod() erstellt eine neue Datei, die mit dem Pfadnamen angegeben
wird, auf den path zeigt. Der Dateityp und die Zugriffsrechte der
neuen Datei werden von mode bestimmt.
Der in mode angegebene Dateityp wird durch die Bits SIFMT angegeben,
die einen der folgenden Werte haben müssen:
SIFIFO FIFO-Datei
SIFCHR zeichenorientierte Datei
SIFDIR Verzeichnis
SIFBLK blockorientierte Datei
SIFREG normale Datei
Die einzige portierbare Verwendung von mknod() besteht in der Erstel-
lung einer FIFO-Gerätedatei. Ist mode nicht SIFIFO oder ist dev nicht
0, ist das Verhalten von mknod() unbestimmt.
Die Berechtigungen für die neue Datei sind im Argument mode durch den
logischen Operator OR verknüpft und können aus einer beliebigen Kombi-
nation der folgenden symbolischen Konstanten ausgewählt werden:
SISUID 04000 Setzen der Benutzer-ID bei Ausführung
SISGID 020#0 Setzen der Gruppen-ID, wenn # 7, 5, 3 oder 1 ist.
Ermöglichen der Datei-/Satzsperre, wenn # 6, 4, 2
oder 0 ist
SISVTX 01000 Sichern des Textsegments nach Ausführung
SIRWXU 00700 Lesen, Schreiben, Ausführen durch Eigentümer
SIRUSR 00400 Lesen durch Eigentümer
SIWUSR 00200 Schreiben durch Eigentümer
SIXUSR 00100 Ausführen bzw. Durchsuchen durch Eigentümer
SIRWXG 00070 Lesen, Schreiben, Ausführen durch Gruppe
SIRGRP 00040 Lesen durch Gruppe
SIWGRP 00020 Schreiben durch Gruppe
SIXGRP 00010 Ausführen durch Gruppe
SIRWXO 00007 Lesen, Schreiben, Ausführen bzw. Durchsuchen durch
andere
SIROTH 00004 Lesen durch andere
SIWOTH 00002 Schreiben durch andere
SIXOTH 00001 Ausführen durch andere
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
mknod(2) mknod(2)
Die Benutzer-ID der Datei wird auf die effektive Benutzer-ID des Pro-
zesses gesetzt. Die Gruppen-ID wird auf die effektive Gruppen-ID des
Prozesses gesetzt. Sollte aber das SISGID-Bit im übergeordneten Ver-
zeichnis gesetzt sein, wird die Gruppen-ID des übergeordneten Ver-
zeichnisses übernommen. Wenn die Gruppen-ID nicht mit der effektiven
Gruppen-ID oder einer unterstützten Gruppen-ID übereinstimmt, wird das
SISGID-Bit gelöscht.
Die Zugriffsberechtigungsbits in mode werden durch die Dateimodus-
Erstellungsmaske des Prozesses geändert: Alle Bits, die in der
Dateimodus-Erstellungsmaske gesetzt sind, werden gelöscht [siehe
umask(2)]. Falls mode eine zeichen- oder blockorientierte Datei
angibt, ist dev die konfigurationsabhängige Angabe dieser Datei. Falls
mode keine zeichen- oder blockorientierte Datei angibt, wird dev igno-
riert.
Bei erfolgreicher Ausführung kennzeichnet mknod die Felder statime,
stctime und stmtime der Datei zur Aktualisierung. Auch die Felder
stctime und stmtime des Verzeichnisses, das den neuen Eintrag ent-
hält, werden zur Aktualisierung gekennzeichnet.
Nur ein Prozeß mit den entsprechenden Berechtigungen kann mknod() für
andere Dateitypen als für FIFO-Gerätedateien aufrufen.
Wenn path ein symbolischer Link ist, wird er nicht verfolgt.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
mknod() schlägt fehl und erstellt keine neue Datei, wenn einer der
folgenden Punkte wahr ist:
EEXIST Die angegebene Datei ist bereits vorhanden.
EINVAL dev ist ungültig.
EFAULT path weist über den zugewiesenen Adreßraum des Prozesses
hinaus.
ELOOP Bei der Auflösung von path wurden zu viele symbolische
Links angetroffen.
EMULTIHOP Komponenten von path erfordern den Sprung auf mehrere
ferne Rechner, und der Dateisystemtyp läßt dies nicht
zu.
ENAMETOOLONG Die Länge des Arguments path überschreitet PATHMAX,
oder die Länge einer Komponente von path überschreitet
NAMEMAX.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
mknod(2) mknod(2)
ENOTDIR Eine Komponente des Pfadpräfixes ist kein Verzeichnis.
ENOENT Eine Komponente des Pfadpräfixes existiert nicht oder
ist ein leerer Pfadname.
EROFS Das Verzeichnis, in dem die Datei erstellt werden soll,
ist in einem Dateisystem, das nur gelesen werden kann.
EINTR Während des Systemaufrufs mknod() wurde ein Signal emp-
fangen.
ENOLINK path verweist auf einen fernen Rechner und die Verbin-
dung zu diesem Rechner ist nicht mehr aktiv.
EPERM Der aufrufende Prozeß verfügt nicht über die entspre-
chenden Berechtigungen, und bei dem Dateityp handelt es
sich nicht um eine FIFO-Gerätedatei.
EACCES Eine Komponente des Pfads darf nicht durchsucht werden,
oder die Schreibberechtigung für das übergeordnete Ver-
zeichnis wird verweigert.
EIO Während des Zugriffs auf das Dateisystem ist ein E/A-
Fehler aufgetreten.
ENOSPC Das Verzeichnis, das die neue Datei enthalten soll, kann
nicht erweitert werden, oder das Dateisystem verfügt
nicht mehr über genügend Ressourcen zur Dateizuordnung.
Die Funktion mknod() kann bei folgender Bedingung fehlschlagen:
ENAMETOOLONG Die Auflösung des Pfadnamens eines symbolischen Links
hat ein Zwischenergebnis erzeugt, dessen Länge PATHMAX
überschreitet.
ERGEBNIS
Bei erfolgreicher Ausführung wird 0 zurückgegeben. Ansonsten wird -1
zurückgegeben und errno zur Anzeige des Fehlers gesetzt.
SIEHE AUCH
mkdir(1), chmod(2), exec(2), umask(2), mkfifo(3C), fs(4), stat(5),
types(5).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98