Scroll to navigation

mkdir(2) System Calls Manual mkdir(2)

NAZWA

mkdir, mkdirat - tworzy katalog

BIBLIOTEKA

Standardowa biblioteka C (libc, -lc)

SKŁADNIA

#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
#include <fcntl.h>           /* Definicja stałych AT_* */
#include <sys/stat.h>
int mkdirat(int dirfd, const char *pathname, 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 pathname.

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

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 podana w pathname 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 pathname jest względna a dirfd ma wartość specjalną AT_FDCWD, to pathname jest interpretowana w odniesieniu do bieżącego katalogu roboczego procesu wywołującego (jak mkdir()).

Jeśli ścieżka pathname 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

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

WERSJE

mkdirat() dodano w Linuksie 2.6.16; obsługę w bibliotece dodano w glibc 2.4.

STANDARDY

mkdir(): SVr4, BSD, POSIX.1-2001, POSIX.1-2008.

mkdirat(): POSIX.1-2008.

UWAGI

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

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

Uwagi dla glibc

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

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

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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.

5 lutego 2023 r. Linux man-pages 6.03