Provided by: manpages-it-dev_4.15.0-9_all bug

NOME

       unlink, unlinkat - Rimuove un nome ed eventualmente il file a cui si riferisce

SINTASSI

       #include <unistd.h>

       int unlink(const char *pathname);

       #include <fcntl.h>           /* Definizione delle costanti AT_* */
       #include <unistd.h>

       int unlinkat(int dirfd, const char *pathname, int flags);

   Macro per test di funzionalità per glibc (vedere feature_test_macros(7)):

       unlinkat():
           A partire da glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Before glibc 2.10:
               _ATFILE_SOURCE

DESCRIZIONE

       unlink()  cancella un nome dal filesystem. Se il nome è l'ultimo collegamento ad un file e
       nessun processo sta usando il file, allora viene cancellato anche il  file  stesso,  e  lo
       spazio occupato viene liberato.

       Se  invece il nome è l'ultimo collegamento ad un file, ma il file è correntemente usato da
       un processo, il file viene rimosso solo quando viene chiuso il descrittore del file a  cui
       fa riferimento.

       Se il nome si riferisce ad un collegamento simbolico, il collegamento viene rimosso.

       Se il nome si riferisce ad un socket, una fifo o un dispositivo, il nome viene rimosso, ma
       i processi che hanno l'oggetto aperto possono continuare ad usarlo.

   unlinkat()
       La chiamata di sistema unlinkat() opera  esattamente  nello  stesso  modo  di  unlink()  o
       rmdir(2) (a seconda che flags includa l'opzione AT_REMOVEDIR) con le differenze di seguito
       descritte.

       Se il nome di percorso dato in pathname è relativo,  è  interpretato  come  relativo  alla
       directory  a  cui il descrittore di file dirfd fa riferimento (piuttosto che relativo alla
       directory di lavoro corrente del processo chiamante, come fanno unlink() e rmdir(2) per un
       nome di percorso relativo).

       Se  il nome di percorso dato in pathname è relativo e dirfd è il valore speciale AT_FDCWD,
       pathname è interpretato come relativo alla  directory  di  lavoro  corrente  del  processo
       chiamante (come unlink() e rmdir(2)).

       Se il nome di percorso dato in pathname è assoluto, dirfd è ignorato.

       flags  è  una  bitmask  che può essere specificata o come 0, o con valori di opzione uniti
       dall'operatore logico  OR  che  controllano  l'operazione  di  unlinkat().  Attualmente  è
       definita solo una di tali opzioni:

       AT_REMOVEDIR
              Senza  opzioni,  unlinkat()  compie  l'equivalente  di  unlink()  su pathname. Se è
              specificata l'opzione AT_REMOVEDIR, effettua l'equivalente di rmdir(2) su pathname.

       Vedere openat(2) per una spiegazione di quello che serve per unlinkat().

VALORE RESTITUITO

       In caso di successo restituisce zero. In caso di errore  restituisce  -1,  e  errno  verrà
       impostato per indicare l'errore.

ERRORI

       EACCES L'accesso  in  scrittura  alla directory contenente pathname non è permesso all'UID
              effettivo del processo, o una delle  directory  in  pathname  non  ha  permesso  la
              ricerca. (Vedere anche path_resolution(7).)

       EBUSY  Il file pathname non può essere scollegato poiché è usato dal sistema o da un altro
              processo; per esempio, è un punto di mount o il software client NFS  lo  ha  creato
              per  rappresentare  un  inode  attivo che altrimenti sarebbe stato senza nome ("NFS
              silly renamed").

       EFAULT pathname punta al di fuori del proprio spazio di indirizzamento accessibile.

       EIO    Si è verificato errore I/O.

       EISDIR pathname fa riferimento a una directory. (Questo è il valore  non-POSIX  restituito
              da Linux a partire da 2.1.132.)

       ELOOP  Sono stati incontrati troppi collegamenti simbolici nel tradurre pathname.

       ENAMETOOLONG
              pathname era troppo lungo.

       ENOENT Un  componente  in  pathname non esiste o è un collegamento simbolico scollegato, o
              pathname è vuoto.

       ENOMEM Insufficiente memoria disponibile per il kernel.

       ENOTDIR
              Un componente usato come directory in pathname non è, in effetti, una directory.

       EPERM  Il sistema non permette lo  scollegamento  di  directory,  o  lo  scollegamento  di
              directory  richiede  privilegi che il processo chiamante non ha. (Questo è l'errore
              restituito prescritto da POSIX: come notato in precedenza, Linux restituisce EISDIR
              in questo caso).

       EPERM (solo Linux)
              Il filesystem non permette lo scollegamento dei file.

       EPERM o EACCES
              La directory contenente pathname ha lo sticky bit (S_ISVTX) impostato e l'effettivo
              UID del processo non è nè l'UID del file da cancellare nè  quello  della  directory
              che lo contiene, e il processo non ha privilegi (Linux non ha capacità CAP_FOWNER).

       EPERM  Il  file  da  scollegare  è marcato come immutabile o di solo accodamento. (Si veda
              ioctl_iflags(2).)

       EROFS  pathname fa riferimento a un file su un filesystem in sola lettura.

       Gli stessi errori che si presentano per unlink() e rmdir(2) si  possono  presentare  anche
       per unlinkat(). I seguenti errori aggiuntivi possono accadere per unlinkat():

       EBADF  pathname è relativo ma dirfd non è né AT_FDCWD né un descrittore di file valido.

       EINVAL Un valore di opzione non valido è stato specificato in flags.

       EISDIR pathname  fa riferimento a una directory, e AT_REMOVEDIR non è stato specificato in
              flags.

       ENOTDIR
              pathname è relativo e dirfd è un descrittore di file che fa riferimento a  un  file
              oltre che a una directory.

VERSIONI

       unlinkat() è stato aggiunto a Linux nel kernel 2.6.16; il supporto per le librerie è stato
       aggiunto a glibc nella versione 2.4.

CONFORME A

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

       unlinkat(): POSIX.1-2008.

NOTE

   Note su glibc
       Su vecchi kernel dove unlinkat() non è disponibile, la funzione  wrapper  glibc  retrocede
       all'uso  di  unlink()  o  rmdir(2).  Dove  pathname  è un nome di percorso relativo, glibc
       costruisce un nome di percorso basato sul  collegamento  simbolico  in  /proc/self/fd  che
       corrisponde all'argomento dirfd.

BUG

       Alcune  ineguatezze  nel protocollo sottostante NFS possono causare sparizioni inaspettate
       di file che sono ancora in uso.

VEDERE ANCHE

       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)

COLOPHON

       Questa pagina fa parte del rilascio 5.13 del progetto Linux man-pages. Una descrizione del
       progetto, le istruzioni per la segnalazione degli errori, e l'ultima  versione  di  questa
       pagina si trovano su https://www.kernel.org/doc/man-pages/.

TRADUZIONE

       La  traduzione  italiana di questa pagina di manuale è stata creata da Goffredo Baroncelli
       <kreijack@usa.net>,    Giulio    Daprelà     <giulio@pluto.it>     e     Marco     Curreli
       <marcocurreli@tiscali.it>

       Questa  traduzione è documentazione libera; leggere la GNU General Public License Versione
       3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ o successiva per le condizioni di copyright.
       Non ci assumiamo alcuna responsabilità.

       Per  segnalare  errori nella traduzione di questa pagina di manuale inviare un messaggio a
       ⟨pluto-ildp@lists.pluto.it⟩.