mkdir() aus sys/stat.h verwenden

English Deutsch

Problem:

Du möchtest die Funktion mkdir() aus dem POSIX-Header sys/stat.h verwenden, weißt aber nicht, wie das mode_t-Argument aussehen soll.

Lösung

Eine detaillierte Referenz findest du auf der Opengroup-Seite zu mkdir

Das erste Argument sollte offensichtlich sein – gib einfach den Pfadnamen des Verzeichnisses ein, das du erstellen möchtest. Wenn du einen std::string (in C++) verwendest, nutze die Member-Funktion c_str(), um einen C-String zu erhalten.

Das zweite Argument definiert die Berechtigungen, die das neu erstellte Verzeichnis haben soll. Diese Anleitung setzt voraus, dass du mit Unix-Dateiberechtigungen vertraut bist. Wenn nicht, lies bitte die entsprechende Wikipedia-Seite.

Entscheide zuerst, welche Rechte das Verzeichnis haben soll. Das läuft auf diese 9 Fragen hinaus:

sys/stat.h stellt mehrere Integer-Werte zur Verfügung, die man bitweise ODER (|) verknüpfen kann, um den mode_t zu erstellen:

Zusätzlich werden einige Abkürzungen bereitgestellt (im Wesentlichen eine bitweise-ODER-Kombination der obigen):

mkdir_example.c
mkdir("mydir", S_IRUSR | S_IWUSR | S_IXUSR);
mkdir("mydir", S_IRWXU);

Um allen alle Rechte zu gewähren (Modus 0777 = rwxrwxrwx), kann man einen der folgenden Aufrufe äquivalent verwenden:

mkdir_example.cpp
mkdir("mydir", S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH);
create_mini_config.sh
cat > mini.config << 'EOF' &&
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_BINFMT_ELF=y
CONFIG_HOSTFS=y
CONFIG_LBD=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_STDERR_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_EXT2_FS=y
CONFIG_MODULES=y
CONFIG_INOTIFY_USER=y
CONFIG_NET=y
CONFIG_UNIX=y
CONFIG_EXT3_FS=m
CONFIG_EXT4_FS=m
EOF
make ARCH=um allnoconfig KCONFIG_ALLCONFIG=mini.config
make ARCH=um -j4 all modules

Check out similar posts by category: C/C++