Una volta che si disponga della ACL desiderata, questa potrà essere impostata
su un file o una directory. Per impostare una ACL sono disponibili due
-funzioni; la prima è \funcd{acl\_set\_file}, che opera sia su file che su
-directory, ed il cui prototipo è:
+funzioni: \funcd{acl\_set\_file}, che opera sia su file che su directory
+usando un \textit{pathname}, e \funcd{acl\_set\_file} che opera solo su file
+usando un file descriptor; i rispettivi prototipi sono:
\begin{funcproto}{
\fhead{sys/types.h}
\fhead{sys/acl.h}
\fdecl{int acl\_set\_file(const char *path, acl\_type\_t type, acl\_t acl)}
\fdesc{Imposta una ACL su un file o una directory.}
+\fdecl{int acl\_set\_fd(int fd, acl\_t acl)}
+\fdesc{Imposta una ACL su un file descriptor.}
}
-{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+{Le funzioni ritornano $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 un generico errore di accesso a \param{path} o il
valore di \param{type} specifica una ACL il cui tipo non può essere
assegnato a \param{path}.
\item[\errcode{EINVAL}] o \param{acl} non è una ACL valida, o \param{type}
- ha un valore non corretto.
- \item[\errcode{ENOSPC}] non c'è spazio disco sufficiente per contenere i
- dati aggiuntivi della ACL.
- \item[\errcode{ENOTSUP}] si è cercato di impostare una ACL su un file
- contenuto in un filesystem che non supporta le ACL.
- \end{errlist}
- ed inoltre \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR},
- \errval{EPERM}, \errval{EROFS} nel loro significato generico.}
-\end{funcproto}
-
-La funzione consente di assegnare la ACL contenuta in \param{acl} al file o
-alla directory indicate dal \textit{pathname} \param{path}, mentre
-con \param{type} si indica il tipo di ACL utilizzando le costanti di
-tab.~\ref{tab:acl_type}, ma si tenga presente che le ACL di default possono
-essere solo impostate qualora \param{path} indichi una directory. Inoltre
-perché la funzione abbia successo la ACL dovrà essere valida, e contenere
-tutti le voci necessarie, unica eccezione è quella in cui si specifica una ACL
-vuota per cancellare la ACL di default associata a
-\param{path}.\footnote{questo però è una estensione della implementazione delle
- ACL di Linux, la bozza di standard POSIX.1e prevedeva l'uso della apposita
- funzione \funcd{acl\_delete\_def\_file}, che prende come unico argomento il
- \textit{pathname} della directory di cui si vuole cancellare l'ACL di
- default, per i dettagli si ricorra alla pagina di manuale.} La seconda
-funzione che consente di impostare una ACL è \funcd{acl\_set\_fd}, ed il suo
-prototipo è:
-
-\begin{funcproto}{
-\fhead{sys/types.h}
-\fhead{sys/acl.h}
-\fdecl{int acl\_set\_fd(int fd, acl\_t acl)}
-\fdesc{Imposta una ACL su un file descriptor.}
-}
-
-{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{EINVAL}] o \param{acl} non è una ACL valida, o ha più voci di
- quante se ne possono assegnare al file indicato da \param{fd}.
+ ha un valore non corretto per \func{acl\_set\_file} o o ha più voci di
+ quante se ne possono assegnare al file per \func{acl\_set\_fd}.
\item[\errcode{ENOSPC}] non c'è spazio disco sufficiente per contenere i
dati aggiuntivi della ACL.
\item[\errcode{ENOTSUP}] si è cercato di impostare una ACL su un file
contenuto in un filesystem che non supporta le ACL.
\end{errlist}
- ed inoltre \errval{EBADF}, \errval{EPERM}, \errval{EROFS} nel loro
- significato generico.
-}
+ ed inoltre nel loro significato generico \errval{EPERM}, \errval{EROFS} per
+ entrambe, \errval{EBADF} per \func{acl\_set\_fd}, \errval{ENAMETOOLONG},
+ \errval{ENOENT}, \errval{ENOTDIR} per \func{acl\_set\_file}.}
\end{funcproto}
-La funzione è del tutto è analoga a \func{acl\_set\_file} ma opera
-esclusivamente sui file identificati tramite un file descriptor. Non dovendo
-avere a che fare con directory (e con la conseguente possibilità di avere una
-ACL di default) la funzione non necessita che si specifichi il tipo di ACL,
-che sarà sempre di accesso, e prende come unico argomento, a parte il file
+Con \func{acl\_set\_file} si assegnara la ACL contenuta in \param{acl} al file
+o alla directory indicate da \param{path} con \param{type} che indica il tipo
+di ACL con le costanti di tab.~\ref{tab:acl_type}; si tenga presente però che
+le ACL di default possono essere solo impostate qualora \param{path} indichi
+una directory; Inoltre perché la funzione abbia successo la ACL dovrà essere
+valida, e contenere tutti le voci necessarie, con l'eccezione di quando in
+caso di directory si specifica una ACL vuota per cancellare la ACL di default
+associata a \param{path}.\footnote{questo però è una estensione della
+ implementazione delle ACL di Linux, la bozza di standard POSIX.1e prevedeva
+ l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che prende
+ come unico argomento il \textit{pathname} della directory di cui si vuole
+ cancellare l'ACL di default, per i dettagli si ricorra alla pagina di
+ manuale.}
+
+La seconda funzione, \func{acl\_set\_fd} è del tutto è analoga alla prima, ma
+non dovendo avere a che fare con directory (e la conseguente possibilità di
+avere una ACL di default) non necessita che si specifichi il tipo di ACL, che
+sarà sempre di accesso, e prende come unico argomento, a parte il file
descriptor, la ACL da impostare.
Le funzioni viste finora operano a livello di una intera ACL, eseguendo in una