otterranno lo stesso file.
Quando si vuole aggiungere ad una directory una voce che faccia riferimento ad
-un file già esistente nella modalità appena descritta, per ottenere quello che
-viene denominato ``\textsl{collegamento diretto}'' (o \textit{hard link}), si
-deve usare la funzione di sistema \funcd{link}, il cui prototipo è:
+un file già esistente come appena descritto, per ottenere quello che viene
+denominato ``\textsl{collegamento diretto}'' (o \textit{hard link}), si deve
+usare la funzione di sistema \funcd{link}, il cui prototipo è:
\begin{funcproto}{
\fhead{unistd.h}
(il numero massimo è specificato dalla variabile \const{LINK\_MAX}, vedi
sez.~\ref{sec:sys_limits}).
\item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e
- \param{newpath} non supporta i collegamenti diretti, è una directory o non
- si rispettano i criteri per i \textit{protected hardlink}.\footnotemark
+ \param{newpath} non supporta i collegamenti diretti, è una directory o per
+ \param{oldpath} non si rispettano i criteri per i \textit{protected
+ hardlink}.\footnotemark
\item[\errcode{EXDEV}] i file \param{oldpath} e \param{newpath} non fanno
riferimento ad un filesystem montato sullo stesso
\textit{mount point}.
- \end{errlist} ed inoltre \errval{EACCES}, \errval{EFAULT}, \errval{EIO},
- \errval{ELOOP}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM},
- \errval{ENOSPC}, \errval{ENOTDIR}, \errval{EROFS} nel loro significato
- generico.}
+ \end{errlist} ed inoltre \errval{EACCES}, \errval{EDQUOT}, \errval{EFAULT},
+ \errval{EIO}, \errval{ELOOP}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+ \errval{ENOMEM}, \errval{ENOSPC}, \errval{ENOTDIR}, \errval{EROFS} nel loro
+ significato generico.}
\end{funcproto}
\footnotetext{i \textit{protected hardlink} sono una funzionalità di
- protezione introdotta con il kernel 3.16 (vedi sez..}
+ protezione introdotta con il kernel 3.16 (si veda
+ sez.~\ref{sec:procadv_security_misc} per i dettagli) che limita la capacità
+ di creare un \textit{hard link} ad un file qualunque.}
La funzione crea in \param{newpath} un collegamento diretto al file indicato
da \param{oldpath}. Per quanto detto la creazione di un nuovo collegamento
tenga presente infatti, come detto in sez.~\ref{sec:filesystem_mounting},
che a partire dal kernel 2.4 uno stesso filesystem può essere montato più
volte su directory diverse.}
-
La funzione inoltre opera sia sui file ordinari che sugli altri oggetti del
filesystem, con l'eccezione delle directory. In alcune versioni di Unix solo
l'amministratore è in grado di creare un collegamento diretto ad un'altra
directory: questo viene fatto perché con una tale operazione è possibile
creare dei \textit{loop} nel filesystem (vedi fig.~\ref{fig:file_link_loop})
-che molti programmi non sono in grado di gestire e la cui rimozione
-diventerebbe piuttosto complicata.\footnote{in genere per questo tipo di
- errori occorre eseguire il programma \cmd{fsck} per riparare il filesystem,
- in quanto in caso di \textit{loop} la directory creata non sarebbe vuota e
- non si potrebbe più rimuoverla.}
+la cui rimozione diventerebbe piuttosto complicata.\footnote{occorrerebbe
+ infatti eseguire il programma \cmd{fsck} per riparare il filesystem, perché
+ in caso di \textit{loop} la directory non potrebbe essere più svuotata,
+ contenendo comunque se stessa, e quindi non potrebbe essere rimossa.}
-Data la pericolosità di questa operazione, e vista che i collegamenti
+Data la pericolosità di questa operazione, e visto che i collegamenti
simbolici (che tratteremo a breve) ed i \textit{bind mount} (già visti in
sez.~\ref{sec:filesystem_mounting}) possono fornire la stessa funzionalità
senza questi problemi, nel caso di Linux questa capacità è stata completamente
{La funzione ritorna $0$ in caso di successo e $-1$ per un errore,
nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
+ \item[\errcode{EACCES}] o non si hanno i permessi sulla directory in cui
+ creare il \textit{link}.
\item[\errcode{EEXIST}] esiste già un file \param{newpath}.
\item[\errcode{ENOENT}] una componente di \param{newpath} non esiste o
\param{oldpath} è una stringa vuota.
supporta i collegamenti simbolici.
\item[\errcode{EROFS}] \param{newpath} è su un filesystem montato in sola
lettura.
- \end{errlist} ed inoltre \errval{EACCES}, \errval{EFAULT}, \errval{EIO},
+ \end{errlist} ed inoltre \errval{EDQUOT}, \errval{EFAULT}, \errval{EIO},
\errval{ELOOP}, \errval{ENAMETOOLONG}, \errval{ENOMEM}, \errval{ENOSPC} e
\errval{ENOTDIR} nel loro significato generico.}
\end{funcproto}
+
La funzione crea un nuovo collegamento simbolico \param{newpath} che fa
riferimento ad \param{oldpath}. Si tenga presente che la funzione non
effettua nessun controllo sull'esistenza di un file di nome \param{oldpath},