mkdir oder mkdirat, Subroutine

Zweck

Erstellt ein Verzeichnis.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/stat.h>
int mkdir (Path,  Mode)
const char *Path;
mode_t Mode;

int mkdirat (DirFileDescriptor, Path, Mode)
int DirFileDescriptor;
const char * Path;
mode_t Mode;

Beschreibung

Die Subroutinen mkdir und mkdirat erstellen ein neues Verzeichnis.

Das neue Verzeichnis enthält Folgendes:

  • Die Eigner-ID wird auf die prozesseffektive Benutzer-ID gesetzt.
  • Wenn im übergeordneten Verzeichnis das Attribut SetFileGroupID(S_ISGID) gesetzt ist, erbt das neue Verzeichnis die Gruppen-ID des übergeordneten Verzeichnisses. Andernfalls wird die Gruppen-ID des neuen Verzeichnisses auf die effektive Gruppen-ID des aufrufenden Prozesses gesetzt.
  • Berechtigungs-und Attributbits werden entsprechend dem Wert des Parameters Modus mit den folgenden Änderungen festgelegt:
    • Alle in der Maske für die Erstellung des Prozessdateimodus festgelegten Bits werden gelöscht.
    • Die Attribute SetFileUserID und Sticky(S_ISVTX) werden gelöscht.
  • Wenn die Variable Pfad einen symbolischen Link benennt, wird dem Link gefolgt. Das neue Verzeichnis wird erstellt, auf das die Variable verweist.

Die Unterroutine mkdirat entspricht der Unterroutine mkdir, wenn der Parameter DirFileDescriptor auf AT_FDCWD gesetzt ist oder der Parameter Path ein absoluter Pfadname ist. Wenn der DirFileDescriptor ein gültiger Dateideskriptor eines geöffneten Verzeichnisses ist und der Path-Parameter ein relativer Pfadname ist, wird der Path-Parameter als relativer Pfad zu dem Verzeichnis betrachtet, das mit dem DirFileDescriptor verbunden ist, und nicht als das aktuelle Arbeitsverzeichnis.

Wenn der DirFileDescriptor ohne das Open-Flag O_SEARCH geöffnet ist, prüft das Unterprogramm anhand der aktuellen Berechtigungen des Verzeichnisses, ob die Verzeichnissuche für dieses Verzeichnis erlaubt ist. Wenn das Verzeichnis mit dem Öffnungsflag O_SEARCH geöffnet wird, führt die Subroutine keine Überprüfung für dieses Verzeichnis durch.

Parameter

Element Beschreibung
Pfad Gibt den Namen des neuen Verzeichnisses an Wenn Network File System (NFS) auf Ihrem System installiert ist, kann dieser Pfad zu einem anderen Knoten wechseln. In diesem Fall wird das neue Verzeichnis auf diesem Knoten erstellt.

Damit die Subroutine mkdir oder mkdirat erfolgreich ausgeführt werden kann, muss ein Prozess Schreibberechtigung für das übergeordnete Verzeichnis des Parameters Pfad haben.

Modus Gibt die Maske für die Lese-, Schreib-und Ausführungsflags für Eigner, Gruppe und andere an. Der Parameter Modus gibt Verzeichnisberechtigungen und Attribute an. Dieser Parameter wird aus logisch ORing-Werten erstellt, die in der Datei <sys/mode.h> beschrieben sind.
DirFileDescriptor Gibt den Dateideskriptor eines geöffneten Verzeichnisses an.

Rückgabewerte

Nach erfolgreicher Ausführung geben die Subroutinen mkdir und mkdirat den Wert 0 zurück. Andernfalls wird ein Wert von -1 zurückgegeben, und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.

Fehlercodes

Die Subroutinen mkdir und mkdirat sind nicht erfolgreich und das Verzeichnis wird nicht erstellt, wenn mindestens eine der folgenden Bedingungen zutrifft:

Element Beschreibung
EACCES Das Erstellen des angeforderten Verzeichnisses erfordert Schreibvorgänge in einem Verzeichnis mit einem Modus, der die Schreibberechtigung verweigert.
EEXIST Die benannte Datei ist bereits vorhanden.
EROFS Die benannte Datei befindet sich auf einem schreibgeschützten Dateisystem.
ENOSPC Das Dateisystem enthält nicht genügend Speicherplatz, um den Inhalt des neuen Verzeichnisses aufzunehmen oder das übergeordnete Verzeichnis des neuen Verzeichnisses zu erweitern.
EMLINK Die Linkanzahl des übergeordneten Verzeichnisses überschreitet die maximale Anzahl (LINK_MAX) . (LINK_MAX) ist in der Datei limits.h definiert.
ENAMETOOLONG Der Parameter Pfad oder eine Pfadkomponente ist zu lang und kann nicht abgeschnitten werden.
ENOENT Eine Komponente des Pfadpräfix ist nicht vorhanden oder der Parameter Pfad verweist auf eine leere Zeichenfolge.
ENOTDIR Eine Komponente des Pfadpräfix ist kein Verzeichnis.
EDQUOT Das Verzeichnis, in das der Eintrag für das neue Verzeichnis gestellt wird, kann nicht erweitert werden, oder ein I-Node oder Plattenblöcke konnten dem neuen Verzeichnis nicht zugeordnet werden, da das Kontingent des Benutzers oder der Gruppe an Plattenblöcken oder I-Nodes in dem Dateisystem, das das Verzeichnis enthält, erschöpft ist.

Die Subroutine mkdirat ist nicht erfolgreich, wenn mindestens eine der folgenden Einstellungen zutrifft:

Element Beschreibung
EBADF Der Parameter Pfad gibt keinen absoluten Pfad an und der Parameter VerzeichnisDateideskriptor ist weder AT_FDCWD noch ein gültiger Dateideskriptor.
ENOTDIR Der Parameter Pfad gibt keinen absoluten Pfad an und der Parameter VerzeichnisDateideskriptor ist weder AT_FDCWD noch ein Dateideskriptor, der einem Verzeichnis zugeordnet ist.

Die Subroutinen mkdir und mkdirat können aus anderen Gründen nicht erfolgreich sein. Eine Liste der zusätzlichen Fehler finden Sie in "Anhang A. Fehlercodes des Basisbetriebssystems für Services, die eine Auflösung des Pfadnamens erfordern".

Wenn NFS auf dem System installiert ist, sind die Subroutinen mkdir und mkdirat ebenfalls nicht erfolgreich, wenn Folgendes zutrifft:

Element Beschreibung
ETIMEDOUT Das Zeitlimit für die Verbindung wurde überschritten.