mknod(2) System Calls Manual mknod(2) BEZEICHNUNG mknod, mknodat - erstellt eine regulare oder eine Spezialdatei BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int mknod(const char *Pfadname, mode_t Modus, dev_t Gerat); #include /* Definition der AT_*-Konstanten */ #include int mknodat(int dirfd, const char *Pfadname, mode_t Modus, dev_t Gerat); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): mknod(): _XOPEN_SOURCE >= 500 || /* Seit Glibc 2.19: */ _DEFAULT_SOURCE || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE BESCHREIBUNG Der Systemaufruf mknod() erstellt einen Dateisystem-Knoten (Datei, Geratedatei oder FIFO, auch bekannt als >>named pipe<<) namens Pfadname und mit den Attributen, die in Modus und Gerat angegeben wurden. Das Argument Modus gibt sowohl den anzuwendenden Dateimodus als auch den Typ des zu erstellenden Knotens an. Es sollte eine Verbindung (mittels bitweisem ODER) eines der weiter unten angegebenen Typen und einer oder mehr der in inode(7) aufgefuhrten Dateimodusbits sein. Der Dateimodus wird durch die umask des Prozesses auf die ubliche Weise festgelegt: Ohne Standard-ACL sind die Zugriffsrechte des erzeugten Knotens also (Modus & ~umask). Der Dateityp muss aus S_IFREG, S_IFCHR, S_IFBLK und S_IFIFO gewahlt werden. In dieser Reihenfolge bestimmen sie eine regulare Datei (die leer angelegt wird), eine Geratedatei fur ein zeichenorientiertes Gerat, eine Geratedatei fur ein blockorientiertes Gerat, einen FIFO (named pipe) und schliesslich einen UNIX Domain Socket. (Der Dateityp null ist aquivalent zu S_IFREG). Bei den Typen S_IFCHR und S_IFBLK legt Gerat die Major- und die Minor-Nummer der neu erzeugten Geratedatei fest; anderenfalls wird Gerat ignoriert. (makedev(3) kann helfen, den Wert fur Gerat zu ermitteln.) Falls Pfadname schon existiert oder ein symbolischer Link ist, schlagt dieser Aufruf mit dem Fehler EEXIST fehl. Der neu erzeugte Knoten lauft unter der effektiven UID des aufrufenden Prozesses. Falls das Verzeichnis, in dem sich der Knoten befindet, das >>set-group-ID<<-Bit gesetzt hat oder das Dateisystem mit BSD-Gruppensemantik eingehangt ist, erbt der neue Knoten die Gruppenrechte des Elternverzeichnisses; anderenfalls gehort er der effektiven Gruppenkennung des aufrufenden Prozesses. mknodat() Der Systemaufruf mknodat() funktioniert genauso wie mknod(), ausser den hier beschriebenen Unterschieden. Falls der in Pfadname ubergebene Pfadname relativ ist wird er als relativ zu dem im Dateideskriptor dirfd referenzierten Verzeichnis interpretiert (statt relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses, wie es bei mknod() fur einen relativen Pfadnamen erfolgt). Falls Pfadname relativ ist und dirfd den besonderen Wert AT_FDCWD annimmt wird Pfadname als relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie mknod()). Falls Pfadname absolut ist, wird Verzdd ignoriert. Lesen Sie openat(2) fur eine Beschreibung der Notwendigkeit von mkdirat(). RUCKGABEWERT Bei Erfolg geben mknod() und mknodat() null zuruck. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER EACCES Das Elternverzeichnis gibt dem Prozess keine Schreibberechtigung oder eines der Verzeichnisse im Pfad-Prafix von Pfadname gewahrte keine Suchberechtigung; siehe auch path_resolution(7). EBADF (mknodat()) Der Pfadname ist relativ, aber Verzdd ist weder AT_FDCWD noch ein gultiger Dateideskriptor. EDQUOT Das Kontingent des Benutzers an Datentragerblocken oder Inodes auf dem Dateisystem ist ausgeschopft. EEXIST Pfadname existiert bereits. Das umfasst auch den Fall, dass Pfadname ein symbolischer Link ist - egal ob der ins Leere weist oder nicht. EFAULT Pfadname zeigt aus dem fur Sie zuganglichen Adressraum heraus. EINVAL Modus verlangte etwas Anderes zu erstellen als eine regulare Datei, eine Geratedatei, einen FIFO oder einen Socket. ELOOP Bei der Auflosung von Pfadname wurden zu viele symbolische Links gefunden. ENAMETOOLONG Pfadname war zu lang. ENOENT Eine Verzeichniskomponente von Pfadname existiert nicht oder ist ein toter symbolischer Link. ENOMEM Es war nicht genugend Kernelspeicher verfugbar. ENOSPC Das Gerat, welches Pfadname enthalt, hat keinen Platz fur den neuen Knoten. ENOTDIR Eine als Verzeichnis benutzte Komponente von Pfadname ist kein Verzeichnis. ENOTDIR (mknodat()) Pfadname ist relativ und Verzdd ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein Verzeichnis ist. EPERM Modus verlangte etwas Anderes zu erstellen als eine regulare Datei, einen FIFO (named pipe) oder einen UNIX Domain Socket und der Aufrufende ist nicht privilegiert (Linux: ihm fehlt die CAP_MKNOD-Capability). Dieser Fehler wird auch zuruckgegeben, wenn das Dateisystem, das Pfadname enthalt, den angeforderten Knotentyp nicht unterstutzt. EROFS Pfadname bezieht sich auf eine Datei auf einem schreibgeschutzten Dateisystem. VERSIONEN POSIX.1-2001 sagt: >>Die einzige portable Verwendung von mknod() ist das Erstellen eines FIFOs. Falls Modus nicht gleich S_IFIFO ist oder Gerat ist nicht 0, ist das Verhalten von mknod() unbestimmt<<. Trotzdem sollte man heutzutage fur diesen Zweck mknod() niemals verwenden und stattdessen die speziell fur diesen Zweck bestimmte Funktion mkfifo(3) einsetzen. Unter Linux kann mknod() nicht zur Erzeugung von Verzeichnissen verwendet werden. Man sollte Verzeichnisse mit mkdir(2) erzeugen. STANDARDS POSIX.1-2008. GESCHICHTE mknod() SVr4, 4.4BSD, POSIX.1-2001 (aber siehe VERSIONEN). mknodat() Linux 2.6.16, Glibc 2.4. POSIX.1-2008. ANMERKUNGEN Es gibt in dem NFS zugrunde liegenden Protokoll viele Unzulanglichkeiten. Einige davon betreffen mknod() und mknodat(). SIEHE AUCH mknod(1), chmod(2), chown(2), fcntl(2), mkdir(2), mount(2), socket(2), stat(2), umask(2), unlink(2), makedev(3), mkfifo(3), acl(5), path_resolution(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Lars J. Brandt , Martin Eberhard Schauer , Helge Kreutzmann und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 mknod(2)