table of contents
- bookworm-backports 4.26.3.1-3~bpo12+1
- testing 4.26.3.1-3
- unstable 4.26.3.1-3
mknod(2) | System Calls Manual | mknod(2) |
NUME¶
mknod, mknodat - creează un fișier special sau obișnuit
BIBLIOTECA¶
Biblioteca C standard (libc, -lc)
SINOPSIS¶
#include <sys/stat.h>
int mknod(const char *nume-rută, mode_t mod, dev_t dispozitiv);
#include <fcntl.h> /* Definirea constantelor AT_* */ #include <sys/stat.h>
int mknodat(int fd-director, const char *nume-rută, mode_t mod, dev_t dispozitiv);
mknod():
_XOPEN_SOURCE >= 500
|| /* Începând cu glibc 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
DESCRIERE¶
Apelul de sistem mknod() creează un nod de sistem de fișiere (fișier, fișier special de dispozitiv sau conductă cu nume) numit nume-rută, cu atributele specificate de mod și dispozitiv.
Argumentul mod specifică atât modul de fișier care urmează să fie utilizat, cât și tipul de nod care urmează să fie creat. Acesta ar trebui să fie o combinație (utilizând logica SAU) a unuia dintre tipurile de fișiere enumerate mai jos și a zero sau mai mulți biți ai modului de fișier enumerați în inode(7).
Modul fișierului este modificat de umask al procesului în mod obișnuit: în absența unei ACL implicite, permisiunile nodului creat sunt (mod & ~umask).
Tipul de fișier trebuie să fie unul dintre S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO sau S_IFSOCK pentru a specifica un fișier obișnuit (care va fi creat gol), un fișier special de caractere, un fișier special de blocuri, un FIFO (conductă cu nume) sau, respectiv, un soclu de domeniu UNIX; (tipul de fișier zero este echivalent cu tipul S_IFREG).
Dacă tipul de fișier este S_IFCHR sau S_IFBLK, atunci dispozitiv specifică numerele majore și minore ale fișierului special de dispozitiv nou creat (makedev(3) poate fi util pentru a construi valoarea pentru dispozitiv); altfel, este ignorat.
Dacă nume-rută există deja sau este o legătură simbolică, acest apel eșuează cu o eroare EEXIST.
Nodul nou creat va fi deținut de ID-ul de utilizator efectiv al procesului. Dacă directorul care conține nodul are bitul set-group-ID activat sau dacă sistemul de fișiere este montat cu semantica de grup BSD, noul nod va moșteni proprietatea de grup de la directorul său părinte; în caz contrar, acesta va fi deținut de ID-ul de grup efectiv al procesului.
mknodat()¶
Apelul de sistem mknodat() funcționează exact în același mod ca mknod(), cu excepția diferențelor descrise aici.
Dacă numele de rută dat în nume-rută este relativ, atunci acesta este interpretat în raport cu directorul la care face referire descriptorul de fișier fd-director ( și nu în raport cu directorul curent de lucru al procesului apelant, așa cum face mknod() pentru un nume de rută relativ).
Dacă nume-rută este relativ și fd-director este valoarea specială AT_FDCWD, atunci nume-rută este interpretat relativ la directorul curent de lucru al procesului apelant (ca mknod()).
Dacă nume-rută este absolut, atunci fd-director este ignorat.
A se vedea openat(2) pentru o explicație a necesității mknodat().
VALOAREA RETURNATö
mknod() și mknodat() returnează zero în caz de succes. În caz de eroare, este returnat -1, iar errno este configurată pentru a indica eroarea.
ERORI-IEȘIRE¶
- EACCES
- Directorul părinte nu permite permisiunea de scriere a procesului sau unul dintre directorii din prefixul rutei nume-rută nu a permis permisiunea de căutare; (a se vedea și path_resolution(7)).
- EBADF
- (mknodat()) nume-rută este relativ, dar fd-director nu este nici AT_FDCWD, nici un descriptor de fișier valid.
- EDQUOT
- Cota utilizatorului de blocuri de disc sau de noduri-i pe sistemul de fișiere a fost epuizată.
- EEXIST
- nume-rută există deja. Aceasta include cazul în care nume-rută este o legătură simbolică, suspendată sau nu.
- EFAULT
- nume-rută indică în afara spațiului de adrese accesibil.
- EINVAL
- mode a solicitat crearea a altceva decât un fișier obișnuit, un fișier special de dispozitiv, FIFO sau soclu.
- ELOOP
- S-au întâlnit prea multe legături simbolice în rezolvarea nume-rută.
- ENAMETOOLONG
- nume-rută este prea lung.
- ENOENT
- O componentă de director din nume-rută nu există sau este o legătură simbolică incertă.
- ENOMEM
- Nu a fost disponibilă suficientă memorie pentru nucleu.
- ENOSPC
- Dispozitivul care conține nume-ruă nu are spațiu pentru noul nod.
- ENOTDIR
- O componentă utilizată ca director în nume-rută nu este, de fapt, un director.
- ENOTDIR
- (mknodat()) nume-rută este relativ și fd-director este un descriptor de fișier care se referă la un fișier, altul decât un director.
- EPERM
- mode a solicitat crearea a altceva decât un fișier obișnuit, FIFO (conductă cu nume) sau soclu de domeniu UNIX, iar apelantul nu este privilegiat (Linux: nu are capacitatea CAP_MKNOD); returnat de asemenea dacă sistemul de fișiere care conține nume-rută nu acceptă tipul de nod solicitat.
- EROFS
- nume-rută se referă la un fișier pe un sistem de fișiere numai-pentru-citire.
VERSIUNI¶
mknodat() a fost adăugat în Linux 2.6.16; suportul pentru bibliotecă a fost adăugat în glibc 2.4.
STANDARDE¶
mknod(): SVr4, 4.4BSD, POSIX.1-2001 (dar vedeți mai jos), POSIX.1-2008.
mknodat(): POSIX.1-2008.
NOTE¶
POSIX.1-2001 spune: „Singura utilizare portabilă a mknod() este de a crea un fișier special FIFO. Dacă mode nu este S_IFIFO sau dispozitiv nu este 0, comportamentul lui mknod() este nespecificat.” Cu toate acestea, în zilele noastre nu ar trebui să se utilizeze niciodată mknod() în acest scop; ar trebui să se utilizeze mkfifo(3), o funcție special definită pentru acest scop.
Sub Linux, mknod() nu poate fi utilizat pentru a crea directoare. Trebuie să creați directoare cu mkdir(2).
Există multe neajunsuri în protocolul care stă la baza NFS. Unele dintre acestea afectează mknod() și mknodat().
CONSULTAȚI ȘI¶
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)
TRADUCERE¶
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
5 februarie 2023 | Pagini de manual de Linux 6.03 |