mknod(2) System Calls Manual mknod(2) NUME mknod, mknodat - creeaza un fiier special sau obinuit BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int mknod(const char *ruta, mode_t mod, dev_t dispozitiv); #include /* Definirea constantelor AT_* */ #include int mknodat(int fd-director, const char *ruta, mode_t mod, dev_t dispozitiv); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): mknod(): _XOPEN_SOURCE >= 500 || /* Incepand cu glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE DESCRIERE Apelul de sistem mknod() creeaza un nod de sistem de fiiere (fiier, fiier special de dispozitiv sau conducta cu nume) numit ruta, cu atributele specificate de mod i dispozitiv. Argumentul mod specifica atat modul de fiier care urmeaza sa fie utilizat, cat i tipul de nod care urmeaza sa fie creat. Acesta ar trebui sa fie o combinaie (utilizand logica SAU) a unuia dintre tipurile de fiiere enumerate mai jos i a zero sau mai muli bii ai modului de fiier enumerai in inode(7). Modul fiierului este modificat de umask al procesului in mod obinuit: in absena unei ACL implicite, permisiunile nodului creat sunt (mod & ~umask). Tipul de fiier trebuie sa fie unul dintre S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO sau S_IFSOCK pentru a specifica un fiier obinuit (care va fi creat gol), un fiier special de caractere, un fiier special de blocuri, un FIFO (conducta cu nume) sau, respectiv, un soclu de domeniu UNIX; (tipul de fiier zero este echivalent cu tipul S_IFREG). Daca tipul de fiier este S_IFCHR sau S_IFBLK, atunci dispozitiv specifica numerele majore i minore ale fiierului special de dispozitiv nou creat (makedev(3) poate fi util pentru a construi valoarea pentru dispozitiv); altfel, este ignorat. Daca ruta exista deja sau este o legatura simbolica, acest apel eueaza cu o eroare EEXIST. Nodul nou creat va fi deinut de ID-ul de utilizator efectiv al procesului. Daca directorul care conine nodul are bitul set-group-ID activat sau daca sistemul de fiiere este montat cu semantica de grup BSD, noul nod va moteni proprietatea de grup de la directorul sau parinte; in caz contrar, acesta va fi deinut de ID-ul de grup efectiv al procesului. mknodat() Apelul de sistem mknodat() funcioneaza exact in acelai mod ca mknod(), cu excepia diferenelor descrise aici. Daca ruta data in ruta este relativa, atunci aceasta este interpretata in raport cu directorul la care face referire descriptorul de fiier fd-director ( i nu in raport cu directorul curent de lucru al procesului apelant, aa cum face mknod() pentru un nume de ruta relativ). Daca ruta este relativa i fd-director este valoarea speciala AT_FDCWD, atunci ruta este interpretata relativ la directorul curent de lucru al procesului apelant (ca mknod()). Daca ruta este absoluta, atunci fd-director este ignorat. A se vedea openat(2) pentru o explicaie a necesitaii mknodat(). VALOAREA RETURNATA mknod() i mknodat() returneaza zero in caz de succes. In caz de eroare, este returnat -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EACCES Directorul parinte nu permite permisiunea de scriere a procesului sau unul dintre directorii din prefixul rutei ruta nu a permis permisiunea de cautare; (a se vedea i path_resolution(7)). EBADF (mknodat()) ruta este relativa, dar fd-director nu este nici AT_FDCWD, nici un descriptor de fiier valid. EDQUOT Cota utilizatorului de blocuri de disc sau de noduri-i pe sistemul de fiiere a fost epuizata. EEXIST ruta exista deja. Aceasta include cazul in care nume-ruta este o legatura simbolica, suspendata sau nu. EFAULT ruta indica in afara spaiului de adrese accesibil. EINVAL mode a solicitat crearea a altceva decat un fiier obinuit, un fiier special de dispozitiv, FIFO sau soclu. ELOOP S-au intalnit prea multe legaturi simbolice in rezolvarea rutei. ENAMETOOLONG ruta era prea lunga. ENOENT O componenta de director din ruta nu exista sau este o legatura simbolica rupta. ENOMEM Nu a fost disponibila suficienta memorie pentru nucleu. ENOSPC Dispozitivul care conine ruta nu are spaiu pentru noul nod. ENOTDIR O componenta utilizata ca director in ruta nu este, de fapt, un director. ENOTDIR (mknodat()) ruta este relativa i fd-director este un descriptor de fiier care se refera la un alt fiier decat un director. EPERM mode a solicitat crearea a altceva decat un fiier obinuit, FIFO (conducta cu nume) sau soclu de domeniu UNIX, iar apelantul nu este privilegiat (Linux: nu are capacitatea CAP_MKNOD); returnat de asemenea daca sistemul de fiiere care conine ruta nu accepta tipul de nod solicitat. EROFS ruta se refera la un fiier pe un sistem de fiiere numai-pentru-citire. VERSIUNI POSIX.1-2001 spune: ,,Singura utilizare portabila a mknod() este de a crea un fiier special FIFO. Daca mode nu este S_IFIFO sau dispozitiv nu este 0, comportamentul lui mknod() este nespecificat." Cu toate acestea, in zilele noastre nu ar trebui sa se utilizeze niciodata mknod() in acest scop; ar trebui sa se utilizeze mkfifo(3), o funcie special definita pentru acest scop. Sub Linux, mknod() nu poate fi utilizat pentru a crea directoare. Trebuie sa creai directoare cu mkdir(2). STANDARDE POSIX.1-2008. ISTORIC mknod() SVr4, 4.4BSD, POSIX.1-2001 (dar a se vedea seciunea VERSIUNI). mknodat() Linux 2.6.16, glibc 2.4. POSIX.1-2008. NOTE Exista multe neajunsuri in protocolul care sta la baza NFS. Unele dintre acestea afecteaza mknod() i mknodat(). CONSULTAI 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 in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.15 17 mai 2025 mknod(2)