mkdir(2) System Calls Manual mkdir(2)

mkdir, mkdirat - tworzy katalog

Standardowa biblioteka C (libc-lc)

#include <sys/stat.h>
int mkdir(const char *path, mode_t mode);
#include <fcntl.h>           /* Definicja stałych AT_* */
#include <sys/stat.h>
int mkdirat(int dirfd, const char *path, mode_t mode);
Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

mkdirat():

    Od glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    Przed glibc 2.10:
        _ATFILE_SOURCE

mkdir() próbuje utworzyć katalog o nazwie path.

Argument mode określa tryb nowego katalogu (zob. inode(7)). Jest on modyfikowany przez umask procesu w standardowy sposób: jeśli brak domyślnych ACL (list kontroli dostępu), tryb tworzonego katalogu to (mode & ~umask & 0777). To, czy inne bity mode są honorowane dla tworzonego katalogu, zależy od systemu operacyjnego. Sytuację w Linuksie, opisano poniżej w WERSJACH.

Właścicielem nowo tworzonego katalogu będzie efektywny identyfikator użytkownika procesu. Jeśli katalog zawierający plik ma ustawiony bit set-group-ID albo system plików zamontowano z semantyką grup BSD (mount -o bsdgroups lub synonimicznie mount -o grpid), nowo tworzony katalog odziedziczy uprawnienia grupy od swego rodzica; w pozostałych przypadkach będzie własnością efektywnego identyfikatora grupy procesu.

Jeśli katalog nadrzędny ma ustawiony bit set-group-ID, będzie go miał również nowo tworzony katalog.

Wywołanie systemowe mkdirat() operuje w dokładnie taki sam sposób jak mkdir(), z wyjątkiem różnic opisanych tutaj.

Jeśli ścieżka path jest względna, jest to interpretowane w odniesieniu do katalogu do którego odnosi się deskryptor pliku dirfd (zamiast w odniesieniu do bieżącego katalogu roboczego procesu wywołującego, jak w stosunku do ścieżek względnych robi to mkdir()).

Jeśli path jest względna a dirfd ma wartość specjalną AT_FDCWD, to path jest interpretowana w odniesieniu do bieżącego katalogu roboczego procesu wywołującego (jak mkdir()).

Jeśli ścieżka path jest bezwzględna, to dirfd jest ignorowane.

Więcej informacji o potrzebie wprowadzenia mkdirat() można znaleźć w podręczniku openat(2).

Po pomyślnym zakończeniu mkdir() i mkdirat() zwracają zero. W przypadku błędu zwracane jest -1 i ustawiane errno wskazując błąd.

Katalog nadrzędny nie zezwala na uprawnienie do zapisu wobec procesu lub jeden z katalogów w ścieżce path nie zezwala na uprawnienie przeszukania (zob. też path_resolution(7)).
(mkdirat()) path jest względna, lecz dirfd nie jest ani AT_FDCWD, ani prawidłowym deskryptorem pliku.
Wyczerpano przydział bloków dysku lub i-węzłów użytkownika w systemie plików.
path już istnieje (niekoniecznie jako katalog). Obejmuje to przypadek, gdy path jest dowiązaniem symbolicznym, prawidłowym lub wiszącym.
path wskazuje poza dostępną dla użytkownika przestrzeń adresową.
Końcowa składowa („basename”) ścieżki path nowego katalogu jest nieprawidłowa (np. zawiera znaki niedozwolone w danym systemie plików).
Podczas rozwiązywania path napotkano zbyt wiele dowiązań symbolicznych.
Liczba dowiązań zwykłych do katalogu nadrzędnego przekroczyłaby LINK_MAX.
path była zbyt długa.
Składowa path, która powinna być katalogiem nie istnieje lub jest wiszącym dowiązaniem symbolicznym.
Brak pamięci jądra.
Na urządzeniu zawierającym path brak miejsca dla nowego katalogu.
Nie można utworzyć nowego katalogu, ponieważ wyczerpano przydział dyskowy użytkownika.
Składowa path, która powinna być katalogiem, w rzeczywistości katalogiem nie jest.
(mkdirat()) path jest względna, a dirfd jest deskryptorem pliku odnoszącym się do pliku innego niż katalog.
System plików zawierający path nie obsługuje tworzenia katalogów.
path odnosi się do pliku w systemie plików tylko do odczytu.
Nie skonfigurowano mapowań UID lub GID (zob. user_namespaces(7)).

W Linuksie, oprócz bitów uprawnień, honorowany jest również bit mode S_ISVTX.

W starszych jądrach, gdzie mkdirat() jest niedostępne, funkcja opakowująca z glibc awaryjnie korzysta z mkdir(). Gdy path jest względna, glibc tworzy ścieżkę w oparciu o dowiązanie symboliczne w /proc/self/fd, odnoszące się do argumentu dirfd.

POSIX.1-2008.

SVr4, BSD, POSIX.1-2001.
Linux 2.6.16, glibc 2.4.

W protokole odpowiedzialnym za obsługę NFS istnieje wiele nietrafnych rozwiązań. Niektóre z nich mają wpływ na mkdir().

mkdir(1), chmod(2), chown(2), mknod(2), mount(2), rmdir(2), stat(2), umask(2), unlink(2), acl(5), path_resolution(7)

Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

17 maja 2025 r. Linux man-pages 6.15