mknod(2) System Calls Manual mknod(2) NAZWA mknod, mknodat - tworzy plik specjalny lub zwykly BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int mknod(const char *path, mode_t mode, dev_t dev); #include /* Definicja stalych AT_* */ #include int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): mknod(): _XOPEN_SOURCE >= 500 || /* Od glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE OPIS Wywolanie systemowe mknod() tworzy wezel w systemie plikow (plik, plik urzadzenia specjalnego lub nazwany potok) o nazwie path, z atrybutami okreslonymi w mode i dev. Argument mode okresla tryb pliku do uzycia oraz typ wezla do utworzenia. Powinien byc kombinacja (bitowym LUB) jednego z typow plikow, wypisanych ponizej, oraz zera lub wiecej bitow trybu pliku, wypisanych w podreczniku inode(7). Tryb pliku jest modyfikowany przez umask procesu, w standardowy sposob: jesli brak domyslnych ACL, uprawnieniami tworzonego wezla beda (mode & ~umask). Typem pliku musi byc jeden z: S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO lub S_IFSOCK, co okresla, odpowiednio, zwykly plik (utworzony jako pusty), specjalny plik znakowy, specjalny plik blokowy, FIFO (nazwany potok) lub gniazdo domeny Uniksa (zerowy typ pliku jest rownowazny S_IFREG). Jesli typem pliku jest S_IFCHR lub S_IFBLK, to dev okresla glowny i poboczny numer nowo tworzonego specjalnego pliku urzadzenia (do utworzenia wartosci dev przydatny moze byc makedev(3)); w innych przypadkach jest ignorowane. Jesli path juz istnieje lub jest dowiazaniem symbolicznym, niniejsze wywolanie zawiedzie z bledem EEXIST. Nowo tworzony wezel bedzie wlasnoscia efektywnego identyfikatora uzytkownika procesu. Jesli katalog zawierajacy wezel ma ustawiony bit set-group-ID albo system plikow zamontowano z semantyka grup BSD, nowy wezel odziedziczy wlasnosc grupy ze swojego katalogu nadrzednego; w innym przypadku bedzie wlasnoscia efektywnego identyfikatora grupy procesu. mknodat() Wywolanie systemowe mknodat() operuje w dokladnie taki sam sposob jak mknod(), 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 mknod()). Jesli path jest wzgledna a dirfd ma wartosc specjalna AT_FDCWD, to path jest interpretowana w odniesieniu do biezacego katalogu roboczego procesu wywolujacego (jak mknod()). Jesli sciezka path jest bezwzgledna, to dirfd jest ignorowane. Wiecej informacji o potrzebie wprowadzenia mknodat() mozna znalezc w podreczniku openat(2). WARTOSC ZWRACANA mknod() i mknodat() zwracaja zero przy powodzeniu. 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 przedrostku sciezki path nie zezwala na uprawnienie przeszukania (zob. tez path_resolution(7)). EBADF (mknodat()) 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. Obejmuje to przypadek, gdy path jest dowiazaniem symbolicznym, prawidlowym lub wiszacym. EFAULT path wskazuje poza dostepna dla uzytkownika przestrzen adresowa. EINVAL mode zazadal utworzenie czegos innego niz zwykly plik, specjalny plik urzadzenia lub gniazdo. ELOOP Podczas rozwiazywania path napotkano zbyt wiele dowiazan symbolicznych. 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 na nowy wezel. ENOTDIR Skladowa path, ktora powinna byc katalogiem, w rzeczywistosci katalogiem nie jest. ENOTDIR (mknodat()) path jest wzgledna, a dirfd jest deskryptorem pliku odnoszacym sie do pliku innego niz katalog. EPERM mode zazadal utworzenia czegos innego niz zwykly plik, FIFO (nazwany potok) lub gniazdo domeny Uniksa, a wywolujacy nie jest uprzywilejowany (Linux: nie ma przywileju CAP_MKNOD); zwracane rowniez, gdy system plikow zawierajacy path nie obsluguje zadanego typu wezla. EROFS path odnosi sie do pliku w systemie plikow tylko do odczytu. WERSJE POSIX.1-2001 wskazuje: ,,Jedynym przenosnym zastosowaniem mknod() jest tworzenie specjalnego pliku FIFO. Jesli mode jest rozny od S_IFIFO albo dev nie wynosi 0, to zachowanie mknod() jest niezdefiniowane". Jednak obecnie nigdy nie powinno stosowac sie mknod() do tego celu; sluzy do tego mkfifo(3), funkcja specjalnie do tego zdefiniowana. W Linuksie, za pomoca mknod() nie mozna tworzyc katalogow. Sluzy do tego mkdir(2). STANDARDY POSIX.1-2024 XSI. HISTORIA mknod() SVr4, 4.4BSD, SUSv1, POSIX.1-2001 XSI (lecz zob. WERSJE). mknodat() glibc 2.4, Linux 2.6.16, POSIX.1-2008 XSI. UWAGI W protokole odpowiedzialnym za obsluge NFS istnieje wiele nietrafnych rozwiazan. Niektore z nich maja wplyw na mknod() i mknodat(). ZOBACZ TAKZE mknod(1), chmod(2), chown(2), fcntl(2), mkdir(2), mount(2), socket(2), stat(2), umask(2), unlink(2), makedev(3), mkfifo(3), 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.18 11 lutego 2026 r. mknod(2)