Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

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

ÜBERSICHT

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
       #include <unistd.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-Versionen <= 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  legt  sowohl  den  anzuwendenden  Dateimodus als auch den Typ des zu
       erstellenden Knotens fest. 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 Gruppen-ID
       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 dirfd 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 entsprechend gesetzt.

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).

       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 pathname 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 pathname wurden zu viele symbolische Links gefunden.

       ENAMETOOLONG
              pathname war zu lang.

       ENOENT Eine  Verzeichniskomponente  von  pathname  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 pathname ist kein Verzeichnis.

       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.

       Die folgenden zusätzlichen Fehler können bei mknodat() auftreten:

       EBADF  dirfd ist kein zulässiger Dateideskriptor.

       ENOTDIR
              Pfadname  ist  relativ  und  dirfd ist ein Dateideskriptor, der sich auf eine Datei
              bezieht, die kein Verzeichnis ist.

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  4.15  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>,  Mario
       Blättermann <mario.blaettermann@gmail.com>  und  Helge  Kreutzmann  <debian@helgefjell.de>
       erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die GNU General Public License
       Version  3  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 <debian-l10n-german@lists.debian.org>.