table of contents
- bookworm-backports 1:4.26.2-1~bpo12+1
- testing 1:4.26.2-1
- unstable 1:4.26.3.1-1
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);
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¶
- EACCES
- 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)).
- EBADF
- (mkdirat()) pathname 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
- pathname już istnieje (niekoniecznie jako katalog). Obejmuje to przypadek, gdy pathname jest dowiązaniem symbolicznym, prawidłowym lub wiszącym.
- EFAULT
- pathname wskazuje poza dostępną dla użytkownika przestrzeń adresową.
- EINVAL
- Końcowa składowa („basename”) ścieżki pathname nowego katalogu jest nieprawidłowa (np. zawiera znaki niedozwolone w danym systemie plików).
- ELOOP
- Podczas rozwiązywania pathname napotkano zbyt wiele dowiązań symbolicznych.
- EMLINK
- Liczba dowiązań zwykłych do katalogu nadrzędnego przekroczyłaby LINK_MAX.
- ENAMETOOLONG
- pathname było zbyt długie.
- ENOENT
- Składowa pathname, 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 pathname brak miejsca dla nowego katalogu.
- ENOSPC
- Nie można utworzyć nowego katalogu, ponieważ wyczerpano przydział dyskowy użytkownika.
- ENOTDIR
- Składnik pathname, który powinien być katalogiem, w rzeczywistości katalogiem nie jest.
- ENOTDIR
- (mkdirat()) pathname jest względna, a dirfd jest deskryptorem pliku odnoszącym się do pliku innego niż katalog.
- EPERM
- System plików zawierający pathname nie obsługuje tworzenia katalogów.
- EROFS
- 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 |