Provided by: manpages-pl-dev_4.27.0-1_all bug

NAZWA

       mknod, mknodat - tworzy plik specjalny lub zwykły

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <sys/stat.h>

       int mknod(const char *pathname, mode_t mode, dev_t dev);

       #include <fcntl.h>           /* Definicja stałych AT_* */
       #include <sys/stat.h>

       int mknodat(int dirfd, const char *pathname, 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

       Wywołanie systemowe mknod() tworzy węzeł w systemie plików (plik, plik urządzenia specjalnego lub nazwany
       potok) o nazwie pathname, z atrybutami określonymi w mode i dev.

       Argument mode określa tryb pliku do użycia oraz typ węzła do utworzenia. Powinien być kombinacją (bitowym
       LUB)  jednego  z  typów  plików, wypisanych poniżej, oraz zera lub więcej bitów trybu pliku, wypisanych w
       podręczniku inode(7).

       Tryb pliku jest modyfikowany przez umask procesu,  w  standardowy  sposób:  jeśli  brak  domyślnych  ACL,
       uprawnieniami tworzonego węzła będą (mode & ~umask).

       Typem  pliku  musi być jeden z: S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO lub S_IFSOCK, co określa, odpowiednio,
       zwykły plik (utworzony jako pusty), specjalny plik znakowy, specjalny plik blokowy, FIFO (nazwany  potok)
       lub gniazdo domeny Uniksa (zerowy typ pliku jest równoważny S_IFREG).

       Jeśli  typem  pliku  jest  S_IFCHR  lub  S_IFBLK,  to dev określa główny i poboczny numer nowo tworzonego
       specjalnego pliku urządzenia (do utworzenia  wartości  dev  przydatny  może  być  makedev(3));  w  innych
       przypadkach jest ignorowane.

       Jeśli  pathname  już  istnieje  lub jest dowiązaniem symbolicznym, niniejsze wywołanie zawiedzie z błędem
       EEXIST.

       Nowo tworzony węzeł będzie własnością  efektywnego  identyfikatora  użytkownika  procesu.  Jeśli  katalog
       zawierający węzeł ma ustawiony bit set-group-ID albo system plików zamontowano z semantyką grup BSD, nowy
       węzeł  odziedziczy  własność  grupy  ze swojego katalogu nadrzędnego; w innym przypadku będzie własnością
       efektywnego identyfikatora grupy procesu.

   mknodat()
       Wywołanie systemowe mknodat() operuje w dokładnie  taki  sam  sposób  jak  mknod(),  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 mknod()).

       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 mknod()).

       Jeśli ścieżka pathname jest bezwzględna, to dirfd jest ignorowane.

       Więcej informacji o potrzebie wprowadzenia mknodat() można znaleźć w podręczniku openat(2).

WARTOŚĆ ZWRACANA

       mknod() i mknodat() zwracają zero przy powodzeniu. 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
              przedrostku   ścieżki   pathname   nie   zezwala   na   uprawnienie   przeszukania    (zob.    też
              path_resolution(7)).

       EBADF  (mknodat())    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.  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 mode zażądał utworzenie czegoś innego niż zwykły plik, specjalny plik urządzenia lub gniazdo.

       ELOOP  Podczas rozwiązywania pathname napotkano zbyt wiele dowiązań symbolicznych.

       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 na nowy węzeł.

       ENOTDIR
              Składnik pathname, który powinien być katalogiem, w rzeczywistości katalogiem nie jest.

       ENOTDIR
              (mknodat())  pathname jest względna, a dirfd jest  deskryptorem  pliku  odnoszącym  się  do  pliku
              innego niż katalog.

       EPERM  mode  zażądał  utworzenia  czegoś  innego niż zwykły plik, FIFO (nazwany potok) lub gniazdo domeny
              Uniksa, a wywołujący nie jest uprzywilejowany  (Linux:  nie  ma  przywileju  CAP_MKNOD);  zwracane
              również, gdy system plików zawierający pathname nie obsługuje żądanego typu węzła.

       EROFS  pathname odnosi się do pliku w systemie plików tylko do odczytu.

WERSJE

       POSIX.1-2001  wskazuje:  „Jedynym przenośnym zastosowaniem mknod() jest tworzenie specjalnego pliku FIFO.
       Jeśli mode jest różny od S_IFIFO albo dev nie wynosi 0,  to  zachowanie  mknod()  jest  niezdefiniowane”.
       Jednak  obecnie  nigdy  nie  powinno  stosować się mknod() do tego celu; służy do tego mkfifo(3), funkcja
       specjalnie do tego zdefiniowana.

       W Linuksie, za pomocą mknod() nie można tworzyć katalogów. Służy do tego mkdir(2).

STANDARDY

       POSIX.1-2008.

HISTORIA

       mknod()
              SVr4, 4.4BSD, POSIX.1-2001 (lecz zob. WERSJE).

       mknodat()
              Linux 2.6.16, glibc 2.4.  POSIX.1-2008.

UWAGI

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

ZOBACZ TAKŻE

       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)

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.

Linux man-pages 6.9.1                            2 maja 2024 r.                                         mknod(2)