Anlegen eines neuen Verzeichnisses in C

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion mkdir, um ein neues Verzeichnis zu erstellen
  2. Verwenden Sie die Funktion mkdirat, um ein neues Verzeichnis zu erstellen
Anlegen eines neuen Verzeichnisses in C

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);
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C File