mkdir(2) System Calls Manual mkdir(2) NAZWA mkdir, mkdirat - tworzy katalog BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int mkdir(const char *path, mode_t mode); #include /* Definicja stalych AT_* */ #include 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() probuje utworzyc katalog o nazwie path. Argument mode okresla tryb nowego katalogu (zob. inode(7)). Jest on modyfikowany przez umask procesu w standardowy sposob: jesli brak domyslnych ACL (list kontroli dostepu), tryb tworzonego katalogu to (mode & ~umask & 0777). To, czy inne bity mode sa honorowane dla tworzonego katalogu, zalezy od systemu operacyjnego. Sytuacje w Linuksie, opisano ponizej w WERSJACH. Wlascicielem nowo tworzonego katalogu bedzie efektywny identyfikator uzytkownika procesu. Jesli katalog zawierajacy plik ma ustawiony bit set-group-ID albo system plikow zamontowano z semantyka grup BSD (mount -o bsdgroups lub synonimicznie mount -o grpid), nowo tworzony katalog odziedziczy uprawnienia grupy od swego rodzica; w pozostalych przypadkach bedzie wlasnoscia efektywnego identyfikatora grupy procesu. Jesli katalog nadrzedny ma ustawiony bit set-group-ID, bedzie go mial rowniez nowo tworzony katalog. mkdirat() Wywolanie systemowe mkdirat() operuje w dokladnie taki sam sposob jak mkdir(), z wyjatkiem roznic opisanych tutaj. Jesli sciezka path jest wzgledna, jest to interpretowane w odniesieniu do katalogu do ktorego odnosi sie deskryptor pliku dirfd (zamiast w odniesieniu do biezacego katalogu roboczego procesu wywolujacego, jak w stosunku do sciezek wzglednych robi to mkdir()). Jesli path jest wzgledna a dirfd ma wartosc specjalna AT_FDCWD, to path jest interpretowana w odniesieniu do biezacego katalogu roboczego procesu wywolujacego (jak mkdir()). Jesli sciezka path jest bezwzgledna, to dirfd jest ignorowane. Wiecej informacji o potrzebie wprowadzenia mkdirat() mozna znalezc w podreczniku openat(2). WARTOSC ZWRACANA Po pomyslnym zakonczeniu mkdir() i mkdirat() zwracaja zero. W przypadku bledu zwracane jest -1 i ustawiane errno wskazujac blad. BLEDY EACCES Katalog nadrzedny nie zezwala na uprawnienie do zapisu wobec procesu lub jeden z katalogow w sciezce path nie zezwala na uprawnienie przeszukania (zob. tez path_resolution(7)). EBADF (mkdirat()) path jest wzgledna, lecz dirfd nie jest ani AT_FDCWD, ani prawidlowym deskryptorem pliku. EDQUOT Wyczerpano przydzial blokow dysku lub i-wezlow uzytkownika w systemie plikow. EEXIST path juz istnieje (niekoniecznie jako katalog). Obejmuje to przypadek, gdy path jest dowiazaniem symbolicznym, prawidlowym lub wiszacym. EFAULT path wskazuje poza dostepna dla uzytkownika przestrzen adresowa. EINVAL Koncowa skladowa (,,basename") sciezki path nowego katalogu jest nieprawidlowa (np. zawiera znaki niedozwolone w danym systemie plikow). ELOOP Podczas rozwiazywania path napotkano zbyt wiele dowiazan symbolicznych. EMLINK Liczba dowiazan zwyklych do katalogu nadrzednego przekroczylaby LINK_MAX. ENAMETOOLONG path byla zbyt dluga. ENOENT Skladowa path, ktora powinna byc katalogiem nie istnieje lub jest wiszacym dowiazaniem symbolicznym. ENOMEM Brak pamieci jadra. ENOSPC Na urzadzeniu zawierajacym path brak miejsca dla nowego katalogu. ENOSPC Nie mozna utworzyc nowego katalogu, poniewaz wyczerpano przydzial dyskowy uzytkownika. ENOTDIR Skladowa path, ktora powinna byc katalogiem, w rzeczywistosci katalogiem nie jest. ENOTDIR (mkdirat()) path jest wzgledna, a dirfd jest deskryptorem pliku odnoszacym sie do pliku innego niz katalog. EPERM System plikow zawierajacy path nie obsluguje tworzenia katalogow. EROFS path odnosi sie do pliku w systemie plikow tylko do odczytu. EOVERFLOW Nie skonfigurowano mapowan UID lub GID (zob. user_namespaces(7)). WERSJE W Linuksie, oprocz bitow uprawnien, honorowany jest rowniez bit mode S_ISVTX. Uwagi dla glibc W starszych jadrach, gdzie mkdirat() jest niedostepne, funkcja opakowujaca z glibc awaryjnie korzysta z mkdir(). Gdy path jest wzgledna, glibc tworzy sciezke w oparciu o dowiazanie symboliczne w /proc/self/fd, odnoszace sie do argumentu dirfd. STANDARDY POSIX.1-2008. HISTORIA mkdir() SVr4, BSD, POSIX.1-2001. mkdirat() Linux 2.6.16, glibc 2.4. UWAGI W protokole odpowiedzialnym za obsluge NFS istnieje wiele nietrafnych rozwiazan. Niektore z nich maja wplyw na mkdir(). ZOBACZ TAKZE mkdir(1), chmod(2), chown(2), mknod(2), mount(2), rmdir(2), stat(2), umask(2), unlink(2), acl(5), path_resolution(7) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 17 maja 2025 r. mkdir(2)