entry}. Le \textit{dentry} sono gli oggetti che il kernel usa per eseguire
la \textit{pathname resolution}, ciascuna di esse corrisponde ad un
\textit{pathname} e contiene il riferimento ad un \textit{inode}, che come
-vedremo a breve è l'oggetto usato dal kernel per identificare un un
+vedremo a breve è l'oggetto usato dal kernel per identificare un
file.\footnote{in questo caso si parla di file come di un qualunque oggetto
generico che sta sul filesystem e non dell'oggetto file del VFS cui
accennavamo prima.} La \textit{dentry} ottenuta dalla chiamata alla funzione
\hline
\end{tabular}
\caption{Le principali operazioni sugli \textit{inode} definite tramite
- \kstruct{inode\_operation}.}
+ \kstructd{inode\_operation}.}
\label{tab:file_inode_operations}
\end{table}
sez.~\ref{sec:file_asyncronous_io}) sul file.\\
\hline
\end{tabular}
- \caption{Operazioni sui file definite tramite \kstruct{file\_operation}.}
+ \caption{Operazioni sui file definite tramite \kstructd{file\_operation}.}
\label{tab:file_file_operations}
\end{table}
\label{fig:sys_statfs}
\end{figure}
-\conffilebeg{/etc/mtab} La \acr{glibc} provvede infine una serie di funzioni
-per la gestione dei due file \conffiled{/etc/fstab}\footnote{più precisamente
- \funcm{setfsent}, \funcm{getfsent}, \funcm{getfsfile}, \funcm{getfsspec},
- \funcm{endfsent}.} ed \conffile{/etc/mtab}\footnote{più precisamente
- \funcm{setmntent}, \funcm{getmntent},\funcm{getmntent\_r},
- \funcm{addmntent},\funcm{endmntent}, \funcm{hasmntopt}.} che
-convenzionalmente sono usati in quasi tutti i sistemi unix-like per mantenere
-rispettivamente le informazioni riguardo ai filesystem da montare e a quelli
-correntemente montati. Le funzioni servono a leggere il contenuto di questi
-file in opportune strutture \structd{fstab} e \structd{mntent}, e, nel caso di
-\conffile{/etc/mtab}, per inserire e rimuovere le voci presenti nel file.
+\conffilebeg{/etc/mtab}
+
+La \acr{glibc} provvede infine una serie di funzioni per la gestione dei due
+file \conffiled{/etc/fstab}\footnote{più precisamente \funcm{setfsent},
+ \funcm{getfsent}, \funcm{getfsfile}, \funcm{getfsspec}, \funcm{endfsent}.}
+ed \conffile{/etc/mtab}\footnote{più precisamente \funcm{setmntent},
+ \funcm{getmntent},\funcm{getmntent\_r}, \funcm{addmntent},\funcm{endmntent},
+ \funcm{hasmntopt}.} che convenzionalmente sono usati in quasi tutti i
+sistemi unix-like per mantenere rispettivamente le informazioni riguardo ai
+filesystem da montare e a quelli correntemente montati. Le funzioni servono a
+leggere il contenuto di questi file in opportune strutture \structd{fstab} e
+\structd{mntent}, e, nel caso di \conffile{/etc/mtab}, per inserire e
+rimuovere le voci presenti nel file.
In generale si dovrebbero usare queste funzioni, in particolare quelle
relative a \conffile{/etc/mtab}, quando si debba scrivere un programma che
disponibile e sempre aggiornata. Per questo motivo tralasceremo la
trattazione, di queste funzioni, rimandando al manuale della \acr{glibc}
\cite{GlibcMan} per la documentazione completa.
+
\conffileend{/etc/mtab}
% TODO (bassa priorità) scrivere delle funzioni (getfsent e getmntent &C)
\end{funcproto}
La funzione apre un \textit{directory stream} per la directory
-\param{dirname}, ritornando il puntatore ad un oggetto di tipo \type{DIR} (che
+\param{dirname}, ritornando il puntatore ad un oggetto di tipo \typed{DIR} (che
è il tipo opaco usato dalle librerie per gestire i \textit{directory stream})
da usare per tutte le operazioni successive, la funzione inoltre posiziona lo
\textit{stream} sulla prima voce contenuta nella directory.
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 \headfile{sys/types.h},
-con l'eccezione di \type{blksize\_t} e \type{blkcnt\_t} che sono nuovi tipi
+con l'eccezione di \typed{blksize\_t} e \typed{blkcnt\_t} che sono nuovi tipi
introdotti per rendersi indipendenti dalla piattaforma.
Benché la descrizione dei commenti di fig.~\ref{fig:file_stat_struct} sia
\textbf{\var{st\_mode}} bit & \textbf{Significato} \\
\hline
\hline
- \constd{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\
- \constd{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\
- \constd{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\
+ \const{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\
+ \const{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\
+ \const{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\
\hline
- \constd{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\
- \constd{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\
- \constd{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\
+ \const{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\
+ \const{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\
+ \const{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\
\hline
- \constd{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\
- \constd{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\
- \constd{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\
+ \const{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\
+ \const{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\
+ \const{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\
\hline
\end{tabular}
\caption{I bit dei permessi di accesso ai file, come definiti in
Entrambe le funzioni utilizzano come secondo argomento \param{mode}, una
variabile dell'apposito tipo primitivo \type{mode\_t} (vedi
-tab.~\ref{tab:intro_primitive_types}) utilizzato per specificare i permessi sui
-file.
+tab.~\ref{tab:intro_primitive_types}) utilizzato per specificare i permessi
+sui file.
\begin{table}[!htb]
\centering
\textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \constd{S\_ISUID} & 04000 & Set user ID bit.\\
- \constd{S\_ISGID} & 02000 & Set group ID bit.\\
- \constd{S\_ISVTX} & 01000 & Sticky bit.\\
+ \const{S\_ISUID} & 04000 & Set user ID bit.\\
+ \const{S\_ISGID} & 02000 & Set group ID bit.\\
+ \const{S\_ISVTX} & 01000 & Sticky bit.\\
\hline
- \constd{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
- \constd{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
- \constd{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\
- \constd{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\
+ \const{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
+ \const{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
+ \const{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\
+ \const{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\
\hline
- \constd{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\
- \constd{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\
- \constd{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\
- \constd{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\
+ \const{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\
+ \const{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\
+ \const{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\
+ \const{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\
\hline
- \constd{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\
- \constd{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\
- \constd{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\
- \constd{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\
+ \const{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\
+ \const{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\
+ \const{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\
+ \const{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\
\hline
\end{tabular}
\caption{Valori delle costanti usate per indicare i vari bit di
La funzione alloca ed inizializza un'area di memoria che verrà usata per
mantenere i dati di una ACL contenente fino ad un massimo di \param{count}
-voci. La funzione ritorna un valore di tipo \type{acl\_t} da usare in tutte le
+voci. La funzione ritorna un valore di tipo \typed{acl\_t} da usare in tutte le
altre funzioni che operano sulla ACL. La funzione si limita alla allocazione
iniziale e non inserisce nessun valore nella ACL che resta vuota.
-Si tenga presente che pur essendo \type{acl\_t} un tipo opaco che identifica
+Si tenga presente che pur essendo \typed{acl\_t} un tipo opaco che identifica
``\textsl{l'oggetto}'' ACL, il valore restituito dalla funzione non è altro
che un puntatore all'area di memoria allocata per i dati richiesti. Pertanto
in caso di fallimento verrà restituito un puntatore nullo di tipo
funzione, che può richiedere anche la ACL relativa ad una directory, il
secondo argomento \param{type} consente di specificare se si vuole ottenere la
ACL di default o quella di accesso. Questo argomento deve essere di tipo
-\type{acl\_type\_t} e può assumere solo i due valori riportati in
+\typed{acl\_type\_t} e può assumere solo i due valori riportati in
tab.~\ref{tab:acl_type}.
\begin{table}[htb]
Se si vuole operare direttamente sui contenuti di un oggetto di tipo
\type{acl\_t} infatti occorre fare riferimento alle singole voci tramite gli
-opportuni puntatori di tipo \type{acl\_entry\_t}, che possono essere ottenuti
+opportuni puntatori di tipo \typed{acl\_entry\_t}, che possono essere ottenuti
dalla funzione \funcm{acl\_get\_entry} (per una voce esistente) o dalla
funzione \funcm{acl\_create\_entry} per una voce da aggiungere. Nel caso della
prima funzione si potrà poi ripetere la lettura per ottenere i puntatori alle
Per i kernel fino al 2.6.25, o se non si attiva il supporto per le
\textit{file capabilities}, il \textit{capabilities bounding set} è un
parametro generale di sistema, il cui valore viene riportato nel file
-\sysctlfile{kernel/cap-bound}. Il suo valore iniziale è definito in sede di
+\sysctlfiled{kernel/cap-bound}. Il suo valore iniziale è definito in sede di
compilazione del kernel, e da sempre ha previsto come default la presenza di
tutte le \textit{capabilities} eccetto \const{CAP\_SETPCAP}. In questa
situazione solo il primo processo eseguito nel sistema (quello con
(\const{IOPRIO\_CLASS\_RT} e prima del kernel 2.6.25 anche
\const{IOPRIO\_CLASS\_IDLE}) per lo scheduling dell'I/O (vedi
sez.~\ref{sec:io_priority}), superare il limite di sistema sul numero massimo
-di file aperti,\footnote{quello indicato da \sysctlfile{fs/file-max}.}
+di file aperti,\footnote{quello indicato da \sysctlfiled{fs/file-max}.}
effettuare operazioni privilegiate sulle chiavi mantenute dal kernel (vedi
sez.~\ref{sec:keyctl_management}), usare la funzione \func{lookup\_dcookie},
usare \const{CLONE\_NEWNS} con \func{unshare} e \func{clone}, (vedi
Le funzioni dell'interfaccia alle \textit{capabilities} definite nelle bozze
dello standard POSIX.1e prevedono l'uso di un tipo di dato opaco,
-\type{cap\_t}, come puntatore ai dati mantenuti nel cosiddetto
+\typed{cap\_t}, come puntatore ai dati mantenuti nel cosiddetto
\textit{capability state},\footnote{si tratta in sostanza di un puntatore ad
una struttura interna utilizzata dalle librerie, i cui campi non devono mai
essere acceduti direttamente.} in sono memorizzati tutti i dati delle
\constd{CAP\_INHERITABLE}& Capacità dell'insieme \textsl{ereditabile}.\\
\hline
\end{tabular}
- \caption{Valori possibili per il tipo di dato \type{cap\_flag\_t} che
+ \caption{Valori possibili per il tipo di dato \typed{cap\_flag\_t} che
identifica gli insiemi delle \textit{capabilities}.}
\label{tab:cap_set_identifier}
\end{table}
indica su quale dei tre insiemi si intende operare, sempre con i valori di
tab.~\ref{tab:cap_set_identifier}. La capacità che si intende controllare o
impostare invece deve essere specificata attraverso una variabile di tipo
-\type{cap\_value\_t}, che può prendere come valore uno qualunque di quelli
+\typed{cap\_value\_t}, che può prendere come valore uno qualunque di quelli
riportati in tab.~\ref{tab:proc_capabilities}, in questo caso però non è
possibile combinare diversi valori in una maschera binaria, una variabile di
tipo \type{cap\_value\_t} può indicare una sola capacità.\footnote{in
\constd{CAP\_SET} & La capacità è impostata.\\
\hline
\end{tabular}
- \caption{Valori possibili per il tipo di dato \type{cap\_flag\_value\_t} che
+ \caption{Valori possibili per il tipo di dato \typed{cap\_flag\_value\_t} che
indica lo stato di una capacità.}
\label{tab:cap_value_type}
\end{table}