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 *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);
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-2008.
HISTORIA
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 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 |