Provided by: manpages-de-dev_4.15.0-9_all bug

BEZEICHNUNG

       mknod, mknodat - erstellt eine reguläre oder eine Spezialdatei

ÜBERSICHT

       #include <sys/stat.h>

       int mknod(const char *Pfadname, mode_t Modus, dev_t Gerät);

       #include <fcntl.h>           /* Definition der AT_*-Konstanten */
       #include <sys/stat.h>

       int mknodat(int dirfd, const char *Pfadname, mode_t Modus, dev_t Gerät);

   Mit Glibc erforderliche 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, Gerätedatei oder FIFO,
       auch bekannt als »named pipe«) namens Pfadname und mit den Attributen, die  in  Modus  und
       Gerät 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)  aufgeführten
       Dateimodusbits sein.

       Der Dateimodus wird durch die umask des Prozesses auf die übliche 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 gewählt werden. In dieser
       Reihenfolge bestimmen sie eine reguläre Datei (die leer angelegt wird),  eine  Gerätedatei
       für ein zeichenorientiertes Gerät, eine Gerätedatei für ein blockorientiertes Gerät, einen
       FIFO (named pipe) und schließlich  einen  UNIX  Domain  Socket.  (Der  Dateityp  null  ist
       äquivalent zu S_IFREG).

       Bei  den  Typen  S_IFCHR  und  S_IFBLK  legt Gerät die Major- und die Minor-Nummer der neu
       erzeugten Gerätedatei fest; anderenfalls wird Gerät ignoriert.  (makedev(3)  kann  helfen,
       den Wert für Gerät zu ermitteln.)

       Falls  Pfadname  schon existiert oder ein symbolischer Link ist, schlägt dieser Aufruf mit
       dem Fehler EEXIST fehl.

       Der neu erzeugte Knoten läuft 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  eingehängt  ist,  erbt  der  neue  Knoten  die
       Gruppenrechte   des   Elternverzeichnisses;   anderenfalls   gehört   er   der  effektiven
       Gruppenkennung des aufrufenden Prozesses.

   mknodat()
       Der Systemaufruf mknodat() funktioniert genauso wie mknod(), außer den hier  beschriebenen
       Unterschieden.

       Falls  der  in  Pfadname  übergebene  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() für 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) für eine Beschreibung der Notwendigkeit von mkdirat().

RÜCKGABEWERT

       Bei Erfolg geben mknod() und mknodat() null zurück. Bei einem Fehler wird -1 zurückgegeben
       und errno gesetzt, um den Fehler anzuzeigen.

FEHLER

       EACCES Das  Elternverzeichnis  gibt  dem  Prozess keine Schreibberechtigung oder eines der
              Verzeichnisse im Pfad-Präfix von Pfadname gewährte  keine  Suchberechtigung;  siehe
              auch path_resolution(7).

       EBADF  (mknodat())  Der  Pfadname  ist  relativ,  aber  Verzdd ist weder AT_FDCWD noch ein
              gültiger Dateideskriptor.

       EDQUOT Das Kontingent des Benutzers an Datenträgerblöcken oder Inodes auf dem  Dateisystem
              ist ausgeschöpft.

       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 für Sie zugänglichen Adressraum heraus.

       EINVAL Modus  verlangte  etwas  Anderes  zu  erstellen  als  eine  reguläre  Datei,   eine
              Gerätedatei, einen FIFO oder einen Socket.

       ELOOP  Bei der Auflösung 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 genügend Kernelspeicher verfügbar.

       ENOSPC Das Gerät, welches Pfadname enthält, hat keinen Platz für 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 reguläre 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
              zurückgegeben, wenn  das  Dateisystem,  das  Pfadname  enthält,  den  angeforderten
              Knotentyp nicht unterstützt.

       EROFS  Pfadname bezieht sich auf eine Datei auf einem schreibgeschützten Dateisystem.

VERSIONEN

       mknodat()  wurde  zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu
       Glibc in Version 2.4 hinzugefügt.

KONFORM ZU

       mknod(): SVr4, 4.4BSD, POSIX.1-2001 (siehe aber auch das Folgende), POSIX.1-2008.

       mknodat(): POSIX.1-2008.

ANMERKUNGEN

       POSIX.1-2001 sagt: »Die einzige portable Verwendung von mknod() ist  das  Erstellen  eines
       FIFOs.  Falls Modus nicht gleich S_IFIFO ist oder Gerät ist nicht 0, ist das Verhalten von
       mknod() unbestimmt«. Trotzdem sollte man  heutzutage  für  diesen  Zweck  mknod()  niemals
       verwenden  und  stattdessen  die  speziell  für  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.

       Es  gibt  in  dem  NFS zugrunde liegenden Protokoll viele Unzulänglichkeiten. 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)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  5.13  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die    deutsche    Übersetzung   dieser   Handbuchseite   wurde   von   Lars   J.   Brandt
       <ljbrandt@jorma.ping.de>,  Martin  Eberhard   Schauer   <Martin.E.Schauer@gmx.de>,   Helge
       Kreutzmann  <debian@helgefjell.de>  und  Mario  Blättermann <mario.blaettermann@gmail.com>
       erstellt.

       Diese Übersetzung ist Freie Dokumentation;  lesen  Sie  die  GNU  General  Public  License
       Version  3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ oder neuer bezüglich der Copyright-
       Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-
       Mail an die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.