HOWTO · C

Anlegen eines neuen Verzeichnisses in C

Dieser Artikel zeigt, wie Sie ein neues Verzeichnis in C erstellen können

Auf dieser Seite

Dieser Artikel demonstriert mehrere Methoden, wie Sie ein neues Verzeichnis in C erstellen können.

Verwenden Sie die Funktion mkdir, um ein neues Verzeichnis zu erstellen

mkdir ist eine POSIX-konforme Funktion, die zum Erstellen eines neuen Verzeichnisses verwendet werden kann. Die Funktion nimmt zwei Argumente entgegen - das erste ist der char-Zeiger, der auf den Pfadnamen des neu zu erstellenden Verzeichnisses zeigt, und das zweite Argument gibt die Berechtigungsbits an, die durch eine Bit-Maske bezeichnet werden und mit den vordefinierten Makrokonstanten gesetzt werden können.

Im folgenden Beispiel deklarieren wir eine konstante String-Variable, die als Verzeichnisname übergeben wird, und geben die Modus-Bits S_IRWXU an, was bedeutet, dass der Besitzer Lese-/Schreib-/Ausführungsrechte für das Verzeichnis hat.

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

const char *name = "Arbitrary Directory";

int main(void) {
  mkdir(name, S_IRWXU);

  exit(EXIT_SUCCESS);
}

Auch wenn wir im vorherigen Beispiel den Aufruf von mkdir in einer einzigen Zeile Code untergebracht haben, ist es wichtig, Fehlerüberprüfungsroutinen zu implementieren, wenn wir mit dem Code der Produktionsebene arbeiten. Zunächst sollten wir prüfen, ob ein neues Verzeichnis erstellt wird und die späteren Abschnitte des Codes erfolgreich ausgeführt werden können, wenn sie von dem angegebenen Verzeichnis abhängen. Beachten Sie, dass mkdir beim Auftreten eines Fehlers -1 zurückgibt und errno entsprechend setzt. In diesem Fall haben wir eine switch-Anweisung implementiert, um einige Fehlercodes zu prüfen und die entsprechenden Meldungen auf der Konsole auszugeben.

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

const char *name = "Arbitrary Directory";

int main(void) {
  errno = 0;
  int ret = mkdir(name, S_IRWXU);
  if (ret == -1) {
    switch (errno) {
      case EACCES:
        printf("the parent directory does not allow write");
        exit(EXIT_FAILURE);
      case EEXIST:
        printf("pathname already exists");
        exit(EXIT_FAILURE);
      case ENAMETOOLONG:
        printf("pathname is too long");
        exit(EXIT_FAILURE);
      default:
        perror("mkdir");
        exit(EXIT_FAILURE);
    }
  }

  exit(EXIT_SUCCESS);
}

Verwenden Sie die Funktion mkdirat, um ein neues Verzeichnis zu erstellen

mkdirat ist ein weiterer Systemaufruf, der ähnlich arbeitet, nur dass er drei Argumente entgegennimmt. Das erste ist der Dateideskriptor des Verzeichnisses, der mit dem Systemaufruf dirfd abgefragt werden kann. Beachten Sie, dass dieser Dateideskriptor verwendet wird, wenn der als zweites Argument angegebene Pfadname ein relativer ist. In diesem Fall wird der Pfad relativ zum angegebenen Verzeichnis und nicht zum aktuellen Arbeitsverzeichnis interpretiert.

mkdirat hat die gleichen Rückgabewerte wie mkdir und die errno-Werte können entsprechend überprüft werden (siehe die vollständige Liste auf dieser Seite). Der folgende Beispielcode versucht, ein neues Verzeichnis im vorherigen Verzeichnis zum aktuellen zu erstellen.

#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

const char *name = "Arbitrary Directory";

int main(void) {
  DIR *dir = opendir("../");
  int dfd = dirfd(dir);
  errno = 0;
  int ret = mkdirat(dfd, name, S_IRWXU);
  if (ret == -1) {
    switch (errno) {
      case EACCES:
        printf("the parent directory does not allow write");
        exit(EXIT_FAILURE);
      case EEXIST:
        printf("pathname already exists");
        exit(EXIT_FAILURE);
      case ENAMETOOLONG:
        printf("pathname is too long");
        exit(EXIT_FAILURE);
      default:
        perror("mkdir");
        exit(EXIT_FAILURE);
    }
  }
  closedir(dir);

  exit(EXIT_SUCCESS);
}