Scroll to navigation

unlink(2) System Calls Manual 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 *nume-rută);
#include <fcntl.h>           /* Definirea constantelor AT_* */
#include <unistd.h>
int unlinkat(int fd-director, const char *nume-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ă numele de rută dat în nume-rută este relativ, atunci acesta 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ă numele de rută dat în 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 unlink() și rmdir(2)).

Dacă numele de rută dat în nume-rută 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:

În mod implicit, unlinkat() efectuează echivalentul lui unlink() pe nume-rută. Dacă fanionul AT_REMOVEDIR este specificat, efectuează echivalentul lui rmdir(2) pe nume-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

Accesul de scriere la directorul care conține nume-rută nu este permis pentru UID-ul efectiv al procesului, sau unul dintre directorii din nume-rută nu a permis permisiunea de căutare; (a se vedea și path_resolution(7)).
Fișierul nume-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”).
nume-rută indică în afara spațiului de adrese accesibil.
A apărut o eroare de In/Ieș.
nume-rută se referă la un director; (aceasta este valoarea non-POSIX returnată de la Linux 2.1.132).
Prea multe legături simbolice au fost întâlnite în traducerea nume-rută.
nume-rută este prea lung.
O componentă din nume-rută nu există sau este o legătură simbolică ruptă, sau nume-rută este gol.
Nu a fost disponibilă suficientă memorie pentru nucleu.
O componentă utilizată ca director în nume-rută nu este, de fapt, un director.
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).
Sistemul de fișiere nu permite dezlegarea fișierelor.
Directorul care conține nume-rută 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).
Fișierul care urmează să fie dezlegat este marcat ca fiind imuabil sau numai cu adăugare; (a se vedea FS_IOC_SETFLAGS(2const).)
nume-rută 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():

nume-rută este relativ, dar dirfd nu este nici AT_FDCWD, nici un descriptor de fișier valid.
O valoare nevalidă de fanion a fost specificată în fanioane.
nume-rută se referă la un director, iar AT_REMOVEDIR nu a fost specificat în fanioane.
nume-rută 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-2008.

ISTORIC

SVr4, 4.3BSD, POSIX.1-2001.
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 nume-rută este un nume de 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 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.

13 iunie 2024 Pagini de manual de Linux 6.9.1