mknod

MKNOD(2)                   Linux-Programmierhandbuch                  MKNOD(2)



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



Linux                         15. September 2017                      MKNOD(2)