symlink(2)

NOME
symlink, symlinkat - crea un nuovo nome per un file

LIBRERIA
Libreria C standard (libc, -lc)

SINTASSI
#include <unistd.h>

int symlink(const char *target, const char *linkpath);

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

int symlinkat(const char *target, int newdirfd, const char *linkpath);

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

symlink():
    _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
        || /* glibc <= 2.19: */ _BSD_SOURCE

symlinkat():
    A partire da glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    Prima di glibc 2.10:
        _ATFILE_SOURCE

DESCRIZIONE
symlink() crea un collegamento simbolico con nome linkpath che contiene la stringa target.

I collegamenti simbolici sono interpretati all'esecuzione come se il contenuto del collegamento fosse stato sostituito nel percorso seguito per trovare un file o una directory.

Un collegamento simbolico può contenere .. come componente del percorso, che (se usato all'inizio del collegamento) fa riferimento alle directory superiori a quella nella quale risiede il collegamento.

Un collegamento simbolico (conosciuto anche come soft link) può puntare ad un file esistente o ad uno non esistente: in quest'ultimo caso è detto collegamento «dangling».

I permessi di un collegamento simbolico sono irrilevanti. Quando si segue il collegamento il proprietario viene ignorato (fatta eccezione per quando la caratteristica protected_symlinks è abilitata, come spiegato in proc(5)); viene invece controllato quando si richiede la rimozione o la rinomina del collegamento che si trovi in una directory con lo sticky bit (S_ISVTX) impostato.

Se linkpath esiste non verrà sovrascritto.

  symlinkat()
La chiamata di sistema symlinkat() opera esattamente nello stesso modo di symlink(), tranne che per le differenze di seguito descritte.

Se il nome di percorso dato in linkpath è relativo, è interpretato come relativo alla directory a cui il descrittore di file newdirfd fa riferimento (piuttosto che relativo alla directory di lavoro corrente del processo chiamante, come fa symlink() per un nome di percorso relativo).

Se linkpath è relativo e newdirfd è il valore speciale AT_FDCWD, linkpath è interpretato come relativo alla directory di lavoro corrente del processo chiamante (come symlink()).

Se linkpath è assoluto, newdirfd è ignorato.

Vedere openat(2) per una spiegazione dei requisiti di symlinkat().

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

ERRORI

EACCES
    Non è possibile l'accesso in scrittura alla directory contenente linkpath, o una delle directory contenute nel prefisso del percorso di linkpath non ha il permesso di ricerca. (Vedere anche path_resolution(7).)

EBADF
    (symlinkat()) linkpath è relativo ma newdirfd non è né AT_FDCWD né un descrittore di file valido.

EDQUOT
    La quota di risorse dell'utente sul filesystem è esaurita. Le risorse possono essere inode o blocchi del disco, a seconda dell'implementazione del filesystem.

EEXIST
    linkpath esiste già.

EFAULT
    target o linkpath puntano fuori dallo spazio di indirizzamento accessibile.

EIO Si è verificato un errore I/O.

ELOOP
    Si sono incontrati troppi collegamenti simbolici nella risoluzione di linkpath.

ENAMETOOLONG
    target o linkpath è troppo lungo.

ENOENT
    Una directory contenuta in linkpath non esiste o è un collegamento simbolico scollegato, o target o linkpath è una stringa vuota.

ENOENT
    (symlinkat()) linkpath è un percorso relativo e newdirfd fa riferimento a una directory che è stata eliminata.

ENOMEM
    Memoria disponibile insufficiente per il kernel.

ENOSPC
    Il dispositivo contenente il file non ha spazio per la nuova directory.

ENOTDIR
    Un elemento usato come directory in linkpath non è, in effetti, una directory.

ENOTDIR
    (symlinkat()) linkpath è relativo e newdirfd è un descrittore di file fa riferimento a un file anziché a una directory.

EPERM
    Il filesystem contenente linkpath non supporta la creazione di collegamenti simbolici.

EROFS
    linkpath è contenuto in un filesystem in sola lettura.

CONFORME A
POSIX.1-2024.

STORIA

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

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

  note su glibc
Su vecchi kernel dove symlinkat() non è disponibile, la funzione wrapper glibc retrocede all'uso di symlink(). Dove linkpath è un nome di percorso relativo, glibc costruisce un nome di percorso basato sul collegamento simbolico in /proc/self/fd che corrisponde all'argomento newdirfd.

NOTE
Non viene effettuato nessun controllo su target.

La cancellazione del nome a cui fa riferimento un collegamento simbolico cancellerà il file (a meno che esso non abbia altri collegamenti fisici). Se non si desidera questo comportamento usare link(2).

VEDERE ANCHE
ln(1), namei(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7)

TRADUZIONE
La traduzione italiana di questa pagina di manuale è stata creata da Goffredo Baroncelli <kreijack@usa.net>, Giulio Daprelà <giulio@pluto.it>, Elisabetta Galli <lab@kkk.it>, Marco Curreli <marcocurreli@tiscali.it> e Giuseppe Sacco <eppesuig@debian.org>

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.