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