Provided by: manpages-de-dev_4.27.0-1_all bug

BEZEICHNUNG

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

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

Ü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 Verzdd, const char *Pfadname, mode_t Modus, dev_t Gerät);

   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, 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
       Verzdd 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 Verzdd 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

       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.

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

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

Linux man-pages 6.9.1                              2. Mai 2024                                          mknod(2)