Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

mknod, mknodat - Dateiverzeichnis, Gerätedatei oder Textdatei erzeugen

&pagelevel(4)&pagelevel

Definition

#include <sys/stat.h>

int mknod(const char *path, mode_t mode, dev_t dev);
int mknodat(int fd, const char *path, mode_t mode, dev_t dev);

Beschreibung

mknod() erstellt eine neue Datei mit dem Pfadnamen, auf den path zeigt. Der Dateityp und die Zugriffsrechte der neuen Datei werden von mode bestimmt. Wenn path ein symbolischer Verweis ist, wird er nicht verfolgt.

Der Dateityp für path wird durch bitweises ODER in das mode-Argument übernommen. Der Dateityp muss eine der folgenden symbolischen Konstanten sein:

S_IFIFO

FIFO-Datei

S_IFCHR

Datei (nicht portabel)

S_IFDIR

Verzeichnis (nicht portabel)

S_IFBLK

blockorientierte Datei (nicht portabel)

S_IFPOSIXBS2

Datei im POSIX-Dateisystem (nicht portabel)

S_IFREG

normale Datei (nicht portabel)

mknod() kann gemäß X/Open-Standard nur dann portabel verwendet werden, wenn eine FIFO-Datei erzeugt wird. Falls der Dateityp nicht S_IFIFO ist oder dev nicht den Wert 0 hat, ist das Verhalten von mknod() undefiniert.

Die Zugriffsrechte der Datei werden ebenfalls durch bitweises ODER in das mode-Argument übernommen. Die Zugriffsrechte können durch eine beliebige Kombination der folgenden symbolischen Konstanten definiert werden:

Symbolischer Name

Bitmuster

Bedeutung

S_ISUID

04000

Setzen der Benutzernummer bei Ausführung

S_ISGID

02000

Setzen der Gruppennummer bei Ausführung

S_IRWXU

00700

Lesen, Schreiben, Ausführen (Durchsuchen, wenn es sich um ein Dateiverzeichnis handelt) durch Eigentümer

S_IRUSR

00400

Lesen durch Eigentümer

S_IWUSR

00200

Schreiben durch Eigentümer

S_IXUSR

00100

Ausführen durch Eigentümer (Durchsuchen, wenn es sich um ein Dateiverzeichnis handelt)

S_IRWXG

00070

Lesen, Schreiben, Ausführen (Durchsuchen) durch Gruppe

S_IRGRP

00040

Lesen durch Gruppe

S_IWGRP

00020

Schreiben durch Gruppe

S_IXGRP

00010

Ausführen (Durchsuchen) durch Gruppe

S_IRWXO

00007

Lesen, Schreiben, Ausführen (Durchsuchen) durch Andere

S_IROTH

00004

Lesen durch Andere

S_IWOTH

00002

Schreiben durch Andere

S_IXOTH

00001

Ausführen durch Andere

S_ISVTX

01000

Für Dateiverzeichnisse: eingeschränktes Löschungsrecht

Die Benutzernummer der Datei wird auf die effektive Benutzernummer des Prozesses gesetzt. Die Gruppennummer der Datei wird auf die effektive Gruppennummer des Prozesses gesetzt, sofern nicht das S_ISGID-Bit im übergeordneten Verzeichnis gesetzt ist: bei gesetztem S_ISGID-Bit wird die Gruppennummer des übergeordneten Verzeichnisses übernommen.

Die Bits für die Zugriffrechte in mode werden durch die Dateierzeugungsmaske des Prozesses geändert: mknod() setzt alle Bits auf 0, die in der Dateierzeugungsmaske gesetzt sind.

Falls mode eine zeichen- oder blockorientierte Datei angibt, ist dev die konfigurationsabhängige Angabe dieser Datei. Falls mode keine zeichen- oder blockorientierte Datei angibt, wird dev ignoriert. Siehe mkdev().

Für andere Dateitypen als FIFO kann mknod() nur durch Benutzer mit entsprechenden Zugriffsrechten (uid = 0) aufgerufen werden.

Die Funktion mknodat() ist äquivalent zu der Funktion mknod(), außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird das neue Dateiverzeichnis, oder die neue Datei nicht im aktuellen Dateiverzeichnis, sondern in dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis erstellt. Wurde der Dateideskriptor ohne O_SE-ARCH geöffnet, prüft die Funktionen, ob eine Suche im verbundenen Dateiverzeichnis mit den dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlaubt ist. Wurde der Dateideskriptor mit O_SEARCH geöffnet, unterbleibt die Prüfung.

Wenn der Funktion mknodat() für den Parameter fd der Wert AT_FDCWD übergeben wurde, wird das aktuelle Dateiverzeichnis benutzt.

Returnwert

0

bei Erfolg.

 

-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.
Im Fehlerfall wird keine neue Datei erzeugt.

Fehler

mknod() und mknodat() schlagen fehl, wenn gilt: 

 

EACCES

Entweder besteht für eine Komponente des Pfades kein Suchrecht, oder es besteht kein Schreibrecht für das der neuen Datei übergeordnete Dateiverzeichnis.

 

EEXIST

Die angegebene Datei existiert bereits.

 

EINTR

Während des Systemaufrufs mknod() wurde ein Signal empfangen.

 

EINVAL

Ein Argument ist ungültig.

 

EEXIST

Beim Zugriff auf das Dateisystem trat ein Ein-/Ausgabefehler auf.

 

ELOOP

Bei der Auflösung von path traten zuviele symbolische Verweise auf.

 

ENAMETOOLONG 



Die Länge des path-Arguments überschreitet {PATH_MAX}, oder die Länge einer Komponente von path überschreitet {NAME_MAX}.

Bei der Auflösung eines symbolischen Verweises in path kam es zu einem Zwischenergebnis, dessen Länge {PATH_MAX} überschreitet.

 

ENOENT

Eine Komponente des Pfadpräfixes existiert nicht oder path ist ein leerer String.

 

ENOLINK

path verweist auf einen fernen Rechner und die Verbindung zu diesem Rechner ist nicht mehr aktiv.

 

ENOSPC

Das Verzeichnis, in dem die Datei erstellt werden soll, kann nicht erweitert werden, oder es ist kein Speicherplatz mehr vorhanden.

 

ENOTDIR

Eine Komponente des Pfadpräfixes ist kein Verzeichnis.

 

EPERM

Die effektive Benutzernummer ist nicht die des Systemverwalters und der Dateityp ist nicht FIFO.

 

EROFS

Das Verzeichnis, in dem die Datei erstellt werden soll, liegt in einem Dateisystem, das nur gelesen werden kann.

 

Zusätzlich schlägt mknodat() fehl, wenn gilt: 

 

EACCES

Der Dateideskriptor fd wurde nicht mit O_SEARCH geöffnet und die dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlauben nicht das Durchsuchen des Dateiverzeichnisses.

 

EBADF

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Parameter fd hat weder den Wert AT_FDCWD, noch enthält er einen gültigen zum Lesen oder Suchen geöffneten Dateideskriptor.

 

ENOTDIR

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden.

Hinweise

mknod() und mknodat() werden nur für POSIX-Dateien ausgeführt. Wenn mknod() mit RFS (remote file sharing) in einem fernen Verzeichnis eine Gerätedatei erzeugt, werden Geräteklasse und Gerätenummer vom Server interpretiert.

Aus Gründen der Portabilität zu Implementierungen, die sich an frühere Versionen des X/Open-Standards halten, wird für die Erzeugung von FIFO-Dateien die Funktion mkfifo() empfohlen.

Siehe auch

chmod(), creat(), exec(), mkdir(), mkfifo(), open(), stat(), umask(), sys/stat.h, sys/types.h.