table of contents
- bookworm-backports 1:4.26.2-1~bpo12+1
- testing 1:4.26.2-1
- unstable 1:4.26.2-1
mknod(2) | System Calls Manual | mknod(2) |
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);
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¶
mknodat() dodano w Linuksie 2.6.16; obsługę w bibliotece dodano w glibc 2.4.
STANDARDY¶
mknod(): SVr4, 4.4BSD, POSIX.1-2001 (lecz zob. niżej), POSIX.1-2008.
mknodat(): POSIX.1-2008.
UWAGI¶
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).
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¶
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 |