mknod

MKNOD(2)                          Systemaufrufe                         MKNOD(2)



BEZEICHNUNG
       mknod - erstellt eine Spezialdatei

UEBERBLICK
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
       #include <unistd.h>

       int mknod(const char *pathname, mode_t typ, dev_t dev);

BESCHREIBUNG
       mknod erstellt eine spezielle Datei (FIFO oder named pipe), eine
       Gerätedatei für ein zeichenorientiertes Gerät (character device) oder
       eine Gerätedatei für ein blockorientiertes Gerät (block device) mit dem
       Namen pathname, spezifiziert durch typ und dev.

       typ legt zugleich die Zugriffsrechte und die Art der zu erstellenden
       Datei fest.  Es sollte eine Verbindung (mit bitweisem ODER) unter der
       Verwendung der weiter unten angegebenen Typen und den Zugriffsrechten für
       die neue Datei sein.

       Die Zugriffsrechte werden normalerweise durch die umask des Prozesses
       festgelegt; die Zugriffsrechte sind also: (typ & ~umask).

       Hier sind die verschiedenen Typen: S_IFREG, S_IFCHR, S_IFBLK und S_IFIFO.
       Von links nach rechts gelesen ergibt sich als erstes eine normale, leere
       Datei, eine Gerätedatei für ein zeichenorientiertes Gerät, eine
       Gerätedatei für ein blockorientiertes Gerät und zuletzt ein FIFO (named
       pipe).

       Bei den Typen S_IFCHR und S_IFBLK legt dev die Major- und die Minor
       Nummer der neu erzeugten Datei fest.  Bei den anderen Typen wird diese
       Angabe ignoriert.

       Die neu erzeugte Datei wird von der effektiven UID des Prozesses, der sie
       aufruft, besessen.  Wenn das Verzeichnis in der sich die Datei befindet
       aber das SGID-Bit gesetzt hat, oder das Filesystem unter BSD gemountet
       ist, erhält die Datei die Gruppenrechte des Verzeichnisses aus dem heraus
       sie aufgerufen wird.

RUECKGABEWERT
       mknod meldet bei Erfolg '0', ansonsten wird '-1' zurückgegeben und errno
       entsprechend gesetzt.

FEHLERMELDUNGEN
       EPERM  Tritt auf, wenn jemand anderes als der Superuser versucht eine
              Datei zu erstellen, die nicht vom Typ FIFO ist.  Kann auch
              auftreten, wenn das Dateisystem in der die Datei erstellt werden
              soll, den angeforderten Dateityp nicht unterstützt.


       EINVAL typ Es wurde versucht, eine andere Datei als eine normale, eine
              Gerätedatei oder eine FIFO zu erstellen.


       EEXIST pathname Der angegebene Dateiname existiert bereits.

       EFAULT pathname zeigt auf einen ungültigen Adreßbereich.

       EACCES Das Verzeichnis, aus dem heraus die Datei aufgerufen wurde,
              erlaubt keinen Schreibzugriff, oder eins der Verzeichnisse in
              pathname erlaubt nicht das Ausführen.

       ENAMETOOLONG
              pathname war zu lang.

       ENOENT Ein (oder mehrere) Verzeichnisse im Pfad von pathname existieren
              nicht, oder es ist ein defekter symbolischer Link vorhanden.

       ENOTDIR
              Ein (oder mehrere) Bestandteile im Pfad von pathname sind ganz
              einfach kein Verzeichnis.

       ENOMEM Kein freier Speicher mehr verfügbar.

       EROFS  Tritt auf, wenn pathname auf einem Read-Only Filesystem liegt,
              aber trotzdem Schreibzugriff verlangt.

       ELOOP  pathname Dateiname zeigt auf einen anderen Dateinamen, der auf
              sich selbst zeigt.

       ENOSPC Das Dateisystem (Device) auf dem dateiname erstellt werden soll,
              hat keinen Platz mehr frei.

FEHLER
       In manchen alten Linux-Versionen (z.B. 0.99pl7) erlaubten die normalen
       Dateisysteme manchmal die Erstellung von zwei Dateien im gleichen
       Verzeichnis mit gleichem Namen.  Dies trat aber nur selten - und dann nur
       in extrem (über)belasteten Systemem auf.

       Behoben wurde dieser Fehler schon im Minix-Filesystem im Linux 0.99pl8
       pre-release und wurde (hoffentlich) in allen anderen Filsystemen kurz
       danach auch ausgebügelt.

       mknod kann nicht zur Erstellung von Verzeichnissen oder zur Erzeugung von
       Sockets verwendet werden, weiterhin ist es anderen als der Superuserin
       nicht möglich, andere Dateien als eine FIFO zu erstellen.

       Es gibt auch noch einige Ungereimtheiten im Zusammenhang mit NFS.

SIEHE AUCH
       read(2), write(2), fcntl(2), close(2), unlink(2), open(2), mkdir(2),
       stat(2), umask(2), mount(2), socket(2), socket(2), fopen(3).



Linux 1.0                         29 März 1994                          MKNOD(2)