unlink(2)

NUME
unlink, unlinkat - șterge un nume și, eventual, fișierul la care se referă

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <unistd.h>

int unlink(const char *rută);

#include <fcntl.h>           /* Definirea constantelor AT_* */
#include <unistd.h>

int unlinkat(int fd-director, const char *rută, int fanioane);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

unlinkat():
    Începând cu glibc 2.10
        _POSIX_C_SOURCE >= 200809L
    Înainte de glibc 2.10:
        _ATFILE_SOURCE

DESCRIERE
unlink() șterge un nume din sistemul de fișiere. Dacă numele respectiv a fost ultima legătură la un fișier și niciun proces nu are fișierul deschis, fișierul este șters, iar spațiul pe care îl folosea este disponibil pentru reutilizare.

Dacă numele a fost ultima legătură la un fișier, dar orice proces are încă fișierul deschis, fișierul va rămâne în existență până când ultimul descriptor de fișier care se referă la acesta este închis.

În cazul în care numele se referea la o legătură simbolică, aceasta este eliminată.

Dacă numele se referea la un soclu, FIFO sau dispozitiv, numele acestuia este eliminat, dar procesele care au obiectul deschis pot continua să îl utilizeze.

  unlinkat()
Apelul de sistem unlinkat() funcționează exact în același mod ca unlink() sau rmdir(2) (în funcție de faptul dacă fanioane include sau nu fanionul AT_REMOVEDIR), cu excepția diferențelor descrise aici.

Dacă ruta dată în rută este relativă, atunci aceasta este interpretată în raport cu directorul la care se referă descriptorul de fișier fd-director ( și nu în raport cu directorul curent de lucru al procesului apelant, așa cum se procedează în unlink() și rmdir(2) pentru un nume de rută relativ).

Dacă ruta dată în rută este relativă și fd-director este valoarea specială AT_FDCWD, atunci ruta este interpretată relativ la directorul curent de lucru al procesului apelant (ca unlink() și rmdir(2)).

Dacă ruta este absolută, atunci fd-director este ignorat.

fanioane este o mască de biți care poate fi specificată fie ca 0, fie prin asocierea conform logicii SAU a valorilor fanioanelor care controlează funcționarea unlinkat(). În prezent, este definit un singur astfel de fanion:

AT_REMOVEDIR
    În mod implicit, unlinkat() efectuează echivalentul lui unlink() pe rută. Dacă fanionul AT_REMOVEDIR este specificat, efectuează echivalentul lui rmdir(2) pe rută.

A se vedea openat(2) pentru o explicație a necesității unlinkat().

VALOAREA RETURNATĂ
În caz de succes, se returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EACCES
    Accesul de scriere la directorul care conține ruta nu este permis pentru UID-ul efectiv al procesului, sau unul dintre directorii din rută nu a permis permisiunea de căutare; (a se vedea și path_resolution(7)).

EBUSY
    Fișierul rută nu poate fi dezlegat deoarece este utilizat de sistem sau de un alt proces; de exemplu, este un punct de montare sau software-ul client NFS l-a creat pentru a reprezenta un nod-i activ, dar fără nume („NFS silly renamed”).

EFAULT
    ruta indică în afara spațiului de adrese accesibil.

EIO A apărut o eroare de In/Ieș.

EISDIR
    ruta se referă la un director; (aceasta este valoarea non-POSIX returnată de la Linux 2.1.132).

ELOOP
    Prea multe legături simbolice au fost întâlnite în traducerea rutei.

ENAMETOOLONG
    ruta era prea lungă.

ENOENT
    O componentă din rută nu există sau este o legătură simbolică ruptă, sau ruta este goală.

ENOMEM
    Nu a fost disponibilă suficientă memorie pentru nucleu.

ENOTDIR
    O componentă utilizată ca director în rută nu este, de fapt, un director.

EPERM
    Sistemul nu permite dezlegarea directoarelor sau dezlegarea directoarelor necesită privilegii pe care procesul apelant nu le are; (acesta este rezultatul de eroare prescris de POSIX; după cum s-a menționat mai sus, Linux returnează EISDIR pentru acest caz).

EPERM (numai în Linux)
    Sistemul de fișiere nu permite dezlegarea fișierelor.

EPERM sau EACCES
    Directorul care conține ruta are bitul lipicios (S_ISVTX) activat și UID-ul efectiv al procesului nu este nici UID-ul fișierului care urmează să fie șters, nici cel al directorului care îl conține, iar procesul nu este privilegiat (Linux: nu are capacitatea CAP_FOWNER).

EPERM
    Fișierul care urmează să fie dezlegat este marcat ca fiind imuabil sau numai cu adăugare; (a se vedea FS_IOC_SETFLAGS(2const).)

EROFS
    ruta se referă la un fișier pe un sistem de fișiere numai-pentru-citire.

Aceleași erori care apar pentru unlink() și rmdir(2) pot apărea și pentru unlinkat(). Următoarele erori suplimentare pot apărea pentru unlinkat():

EBADF
    ruta este relativă, dar dirfd nu este nici AT_FDCWD, nici un descriptor de fișier valid.

EINVAL
    O valoare nevalidă de fanion a fost specificată în fanioane.

EISDIR
    ruta se referă la un director, iar AT_REMOVEDIR nu a fost specificat în fanioane.

ENOTDIR
    ruta este relativă și dirfd este un descriptor de fișier ce se referă la un alt fișier decât un director.

STANDARDE
POSIX.1-2024.

ISTORIC

unlink()
    SVr4, 4.3BSD, POSIX.1-2001.

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

  glibc
Pe nucleele mai vechi în care unlinkat() nu este disponibil, funcția de învăluire glibc revine la utilizarea unlink() sau rmdir(2). Atunci când ruta este o rută relativă,, glibc construiește un nume de rută bazat pe legătura simbolică din /proc/self/fd care corespunde argumentului fd-director.

ERORI
Neajunsurile din protocolul care stă la baza NFS pot provoca dispariția neașteptată a fișierelor care sunt încă utilizate.

CONSULTAȚI ȘI
rm(1), unlink(1), chmod(2), link(2), mknod(2), open(2), rename(2), rmdir(2), mkfifo(3), remove(3), path_resolution(7), symlink(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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.