mkdir(2)

NAZWA
mkdir, mkdirat - tworzy katalog

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#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

OPIS
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.

  mkdirat()
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).

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

BŁĘDY

EACCES
    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)).

EBADF
    (mkdirat()) path jest względna, lecz dirfd nie jest ani AT_FDCWD, ani prawidłowym deskryptorem pliku.

EDQUOT
    Wyczerpano przydział bloków dysku lub i-węzłów użytkownika w systemie plików.

EEXIST
    path już istnieje (niekoniecznie jako katalog). Obejmuje to przypadek, gdy path jest dowiązaniem symbolicznym, prawidłowym lub wiszącym.

EFAULT
    path wskazuje poza dostępną dla użytkownika przestrzeń adresową.

EINVAL
    Końcowa składowa („basename”) ścieżki path nowego katalogu jest nieprawidłowa (np. zawiera znaki niedozwolone w danym systemie plików).

ELOOP
    Podczas rozwiązywania path napotkano zbyt wiele dowiązań symbolicznych.

EMLINK
    Liczba dowiązań zwykłych do katalogu nadrzędnego przekroczyłaby LINK_MAX.

ENAMETOOLONG
    path była zbyt długa.

ENOENT
    Składowa path, która powinna być katalogiem nie istnieje lub jest wiszącym dowiązaniem symbolicznym.

ENOMEM
    Brak pamięci jądra.

ENOSPC
    Na urządzeniu zawierającym path brak miejsca dla nowego katalogu.

ENOSPC
    Nie można utworzyć nowego katalogu, ponieważ wyczerpano przydział dyskowy użytkownika.

ENOTDIR
    Składowa path, która powinna być katalogiem, w rzeczywistości katalogiem nie jest.

ENOTDIR
    (mkdirat()) path jest względna, a dirfd jest deskryptorem pliku odnoszącym się do pliku innego niż katalog.

EPERM
    System plików zawierający path nie obsługuje tworzenia katalogów.

EROFS
    path odnosi się do pliku w systemie plików tylko do odczytu.

EOVERFLOW
    Nie skonfigurowano mapowań UID lub GID (zob. user_namespaces(7)).

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

  Uwagi dla glibc
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.

STANDARDY
POSIX.1-2024.

HISTORIA

mkdir()
    4.2BSD, SVr4, POSIX.1-1988.

mkdirat()
    glibc 2.4, Linux 2.6.16, POSIX.1-2008.

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

ZOBACZ TAKŻE
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
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.