\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[]{}
+ \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
struct stat {
dev_t st_dev; /* device */
ino_t st_ino; /* inode */
effettuare delle selezioni sul tipo di file voluto, combinando opportunamente
i vari flag; ad esempio se si volesse controllare se un file è una directory o
un file ordinario si potrebbe definire la condizione:
-\begin{lstlisting}{}
+\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
#define IS_FILE_DIR(x) ( ((x) & S_IFMT) & (S_IFDIR | S_IFREG) )
\end{lstlisting}
in cui prima si estraggono da \var{st\_mode} i bit relativi al tipo di file e
\begin{table}[htb]
\centering
\begin{tabular}[c]{|c|l|l|c|}
+ \hline
+ Membro & Significato & Funzione&opzione \\
+ \hline
+ \hline
\var{st\_atime}& ultimo accesso ai dati del file &\func{read}& \cmd{-u}\\
\var{st\_mtime}& ultima modifica ai dati del file &\func{write}& default\\
\var{st\_ctime}& ultima modifica ai dati dell'inode&\func{chmod},
\func{utime} & \cmd{-c} \\
+ \hline
\end{tabular}
\caption{I tre tempi associati a ciascun file}
\label{tab:filedir_file_times}
\footnotesize
\begin{tabular}[c]{|l|c|c|c|c|c|c|l|}
\hline
- Funzione & \multicolumn{3}{c}{File o directory}
- &\multicolumn{3}{c}{Directory genitrice} &Note \\
- Funzione & \multicolumn{3}{c}{di riferimento} &
- \multicolumn{3}{c}{del riferimento} \\
+ \multicolumn{1}{|c|}{Funzione}
+ &\multicolumn{3}{p{2cm}}{File o directory di riferimento}
+ &\multicolumn{3}{p{2cm}}{Directory genitrice del riferimento}
+ &\multicolumn{1}{|c|}{Note} \\
+ \cline{2-7}
+ & \textsl{(a)} & \textsl{(m)}& \textsl{(c)}
+ & \textsl{(a)} & \textsl{(m)}& \textsl{(c)}& \\
\hline
\hline
\func{chmod}, \func{fchmod}
\end{prototype}
La struttura \var{utimebuf} usata da \func{utime} è definita come:
-\begin{lstlisting}{}
+\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
struct utimbuf {
time_t actime; /* access time */
time_t modtime; /* modification time */
L'effetto della funzione e i privilegi necessari per eseguirla dipendono da
cosa è l'argomento \var{times}; se è \textit{NULL} la funzione setta il tempo
-corrente e basta l'accesso in scrittura al file; se invece si è specificato un
-valore la funzione avrà successo solo se si è proprietari del file (o si hanno
-i privilegi di amministratore).
+corrente ed è sufficiente avere accesso in scrittura al file; se invece si è
+specificato un valore la funzione avrà successo solo se si è proprietari del
+file (o si hanno i privilegi di amministratore).
Si tenga presente che non è comunque possibile specificare il tempo di
-cambiamento di stato del file, che viene comunque cambiato dal kernel anche
-alla chiamata di \func{utime}; questo serve acnhe come misura di sicurezza per
-evitare che si possa modificare un file nascondendo completamente le proprie
-tracce. In realtà la cosa resta possibile, se si è in grado di accedere al
-device, scrivendo direttamente sul disco senza passare attraverso il
-filesystem, ma ovviamente è molto più complicato da realizzare.
-
+cambiamento di stato del file, che viene comunque cambiato dal kernel tutte le
+volte che si modifica l'inode (quindi anche alla chiamata di \func{utime}).
+Questo serve anche come misura di sicurezza per evitare che si possa
+modificare un file nascondendo completamente le proprie tracce. In realtà la
+cosa resta possibile, se si è in grado di accedere al device, scrivendo
+direttamente sul disco senza passare attraverso il filesystem, ma ovviamente è
+molto più complicato da realizzare.
\section{Il controllo di accesso ai file}
% elementare qui; inoltre ad un processo sono associati diversi identificatori,
% torneremo su questo in maggiori dettagli in seguito in \secref{sec:proc_perms}.
-
-
\subsection{I flag \texttt{suid} e \texttt{sgid}}
\label{sec:filedir_suid_sgid}