X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=filedir.tex;h=b15c5f098b3216c6b5539cb3aea5447d3b19a12f;hb=339b308be75820bb04f49e64327f9edb9bbe1a7f;hp=4c59dc1cbf458c7407cb470449d773434f2d1f04;hpb=252147ac2ed5342d06d6cb0c13d6c3f956b128f3;p=gapil.git diff --git a/filedir.tex b/filedir.tex index 4c59dc1..b15c5f0 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1541,9 +1541,10 @@ su un file, su un link simbolico e su un file descriptor. La struttura \struct{stat} usata da queste funzioni è definita nell'header \file{sys/stat.h} e in generale dipende dall'implementazione; la versione usata da Linux è mostrata in fig.~\ref{fig:file_stat_struct}, così come -riportata dalla pagina di manuale di \func{stat} (in realtà la definizione +riportata dalla pagina di manuale di \func{stat}; in realtà la definizione effettivamente usata nel kernel dipende dall'architettura e ha altri campi -riservati per estensioni come tempi più precisi, o per il padding dei campi). +riservati per estensioni come tempi dei file più precisi (vedi +sez.~\ref{sec:file_file_times}), o per il padding dei campi. \begin{figure}[!htb] \footnotesize @@ -1561,8 +1562,6 @@ Si noti come i vari membri della struttura siano specificati come tipi primitivi del sistema (di quelli definiti in tab.~\ref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}). -% TODO: aggiornare con i cambiamenti ai tempi fatti con il 2.6 - \subsection{I tipi di file} \label{sec:file_types} @@ -1940,6 +1939,17 @@ file di dispositivo, scrivendo direttamente sul disco senza passare attraverso il filesystem, ma ovviamente in questo modo la cosa è molto più complicata da realizzare. +Infine a partire dal kernel 2.6 la risoluzione dei tempi dei file, che nei +campi di tab.~\ref{tab:file_file_times} è espressa in secondi, è stata +portata ai nanosecondi per la gran parte dei filesystem. La ulteriore +informazione può essere acceduta attraverso altri campi; se si sono definite +le macro \macro{\_BSD\_SOURCE} o \macro{\_SVID\_SOURCE} questi sono +\var{st\_atim.tv\_nsec}, \var{st\_mtim.tv\_nsec} e \var{st\_ctim.tv\_nsec} se +queste non sono definite, \var{st\_atimensec}, \var{st\_mtimensec} e +\var{st\_mtimensec}. Qualora il supporto per questa maggior precisione sia +assente questi campi aggiuntivi saranno nulli. + +%TODO documentare utimes \section{Il controllo di accesso ai file} @@ -3779,8 +3789,9 @@ della ACL rappresentata dai dati contenuti nel buffer puntato da utilizzo. Una volta che si disponga della ACL desiderata, questa potrà essere impostata -su un file o una directory. Per far questo sono disponibili due funzioni; la -prima è \funcd{acl\_set\_file}, il cui prototipo è: +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 è: \begin{functions} \headdecl{sys/types.h} \headdecl{sys/acl.h} @@ -3788,7 +3799,7 @@ prima \funcdecl{int acl\_set\_file(const char *path, acl\_type\_t type, acl\_t acl)} - Imposta una ACL su un file. + Imposta una ACL su un file o una directory. \bodydesc{La funzione restituisce $0$ in caso di successo e $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori: @@ -3808,12 +3819,20 @@ prima } \end{functions} -La funzione ... - -%TODO: finire - -La seconda funzione che consente di impostare una ACL è \funcd{acl\_set\_fd}, -il cui prototipo è: +La funzione consente di assegnare la ACL contenuta in \param{acl} al file o +alla directory indicate dal pathname \param{path}, mentre con \param{type} si +indica il tipo di ACL utilizzando le constanti 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 \func{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 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{functions} \headdecl{sys/types.h} \headdecl{sys/acl.h} @@ -3837,10 +3856,17 @@ il cui prototipo } \end{functions} +La funzione è del tutto è analoga a \funcd{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 +descriptor, la ACL da impostare. + Le funzioni viste finora operano a livello di una intera ACL, eseguendo in una sola volta tutte le operazioni relative a tutte le voci in essa contenuta. In generale è possibile modificare un singolo valore all'interno di una singola -voce direttamente con le funzioni previste dallo standardo POSIX.1e. Queste +voce direttamente con le funzioni previste dallo standard POSIX.1e. Queste funzioni però sono alquanto macchinose da utilizzare per cui è molto più semplice operare direttamente sulla rappresentazione testuale. Questo è il motivo per non tratteremo nei dettagli dette funzioni, fornendone solo una @@ -3855,7 +3881,7 @@ funzione \funcd{acl\_create\_entry} per una voce da aggiungere. Nel caso della prima funzione si potrà poi ripetere la lettura per ottenere i puntatori alle singole voci successive alla prima. -Una volta ottenuti detti puntatori si porà operare sui contenuti delle singole +Una volta ottenuti detti puntatori si potrà operare sui contenuti delle singole voci; con le funzioni \funcd{acl\_get\_tag\_type}, \funcd{acl\_get\_qualifier}, \funcd{acl\_get\_permset} si potranno leggere rispettivamente tipo, qualificatore e permessi mentre con le corrispondente funzioni @@ -3866,13 +3892,9 @@ vengono utilizzati tipi di dato ad hoc.\footnote{descritti nelle singole ad un altra con \funcd{acl\_copy\_entry} o eliminare una voce da una ACL con \funcd{acl\_delete\_entry}. - - \itindend{Access~Control~List} - -% TODO trattare le ACL, la documentazione di sistema è nei pacchetti -% libacl1-dev e acl +% la documentazione di sistema è nei pacchetti libacl1-dev e acl % vedi anche http://www.suse.de/~agruen/acl/linux-acls/online/ @@ -4002,9 +4024,10 @@ programmi e librerie) di cui il server potrebbe avere bisogno. % LocalWords: fsetxattr flags XATTR REPLACE listxattr llistxattr flistxattr by % LocalWords: removexattr lremovexattr fremovexattr attributename lacl acl % LocalWords: OBJ setfacl len any prefix separator options NUMERIC IDS SMART -% LocalWords: INDENT major number IDE Documentation makedev fopendir proc +% LocalWords: INDENT major number IDE Documentation makedev fopendir proc copy %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" %%% End: +% LocalWords: euidaccess eaccess delete def tag qualifier permset