X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=e59fd0603d862100d8c68af41548434050e88836;hp=4d91e52a2acb10bf931f3f1d06188e9d31bf3dba;hb=b38fb9f5c8fb8360f7ac296baa8f4a0bdd692d1c;hpb=997a10619163980437d438ba7a4d8dda3fc56d98 diff --git a/fileunix.tex b/fileunix.tex index 4d91e52..e59fd06 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -34,7 +34,9 @@ tutte le implementazione di un sistema unix-like. \subsection{L'architettura dei \textit{file descriptor}} \label{sec:file_fd} -\index{file!descriptor|(} Per poter accedere al contenuto di un file occorre +\index{file!descriptor|(} + +Per poter accedere al contenuto di un file occorre creare un canale di comunicazione con il kernel che renda possibile operare su di esso (si ricordi quanto visto in sez.~\ref{sec:file_vfs_work}). Questo si fa aprendo il file con la funzione \func{open} che provvederà a localizzare @@ -185,9 +187,8 @@ usando direttamente le system call del kernel. \label{sec:file_open} La funzione \funcd{open} è la funzione fondamentale per accedere ai file, ed è -quella che crea l'associazione fra un -\index{\textit{pathname}}\textit{pathname} ed un file descriptor, il suo -prototipo è: +quella che crea l'associazione fra un \itindex{pathname}\textit{pathname} ed +un file descriptor, il suo prototipo è: \begin{functions} \headdecl{sys/types.h} \headdecl{sys/stat.h} @@ -344,10 +345,10 @@ valore pi \footnotetext[2]{la pagina di manuale di \func{open} segnala che questa opzione è difettosa su NFS, e che i programmi che la usano per stabilire un - \textsl{file di lock}\index{file!di lock} possono incorrere in una race - condition\index{\textit{race~condition}}. Si consiglia come alternativa di - usare un file con un nome univoco e la funzione \func{link} per verificarne - l'esistenza (vedi sez.~\ref{sec:ipc_file_lock}).} + \textsl{file di lock}\index{file!di lock} possono incorrere in una + \textit{race condition}\itindex{race~condition}. Si consiglia come + alternativa di usare un file con un nome univoco e la funzione \func{link} + per verificarne l'esistenza (vedi sez.~\ref{sec:ipc_file_lock}).} \footnotetext[3]{\textit{Denial of Service}\index{DoS}, si chiamano così attacchi miranti ad impedire un servizio causando una qualche forma di @@ -542,8 +543,8 @@ Si tenga presente inoltre che usare \const{SEEK\_END} non assicura affatto che la successiva scrittura avvenga alla fine del file, infatti se questo è stato aperto anche da un altro processo che vi ha scritto, la fine del file può essersi spostata, ma noi scriveremo alla posizione impostata in precedenza -(questa è una potenziale sorgente di \textit{race condition} -\index{\textit{race~condition}}, vedi sez.~\ref{sec:file_atomic}). +(questa è una potenziale sorgente di \itindex{race~condition}\textit{race + condition}, vedi sez.~\ref{sec:file_atomic}). Non tutti i file supportano la capacità di eseguire una \func{lseek}, in questo caso la funzione ritorna l'errore \errcode{EPIPE}. Questo, oltre che per @@ -843,8 +844,8 @@ sez.~\ref{sec:file_locking}). Un caso tipico di necessità di accesso condiviso in scrittura è quello in cui vari processi devono scrivere alla fine di un file (ad esempio un file di log). Come accennato in sez.~\ref{sec:file_lseek} impostare la posizione alla -fine del file e poi scrivere può condurre ad una \textit{race - condition}\index{\textit{race~condition}}: infatti può succedere che un +fine del file e poi scrivere può condurre ad una +\itindex{race~condition}\textit{race condition}: infatti può succedere che un secondo processo scriva alla fine del file fra la \func{lseek} e la \func{write}; in questo caso, come abbiamo appena visto, il file sarà esteso, ma il nostro primo processo avrà ancora la posizione corrente impostata con la @@ -863,9 +864,9 @@ Un altro caso tipico in cui creare un \textsl{file di lock}\index{file!di lock}, bloccandosi se il file esiste. In questo caso la sequenza logica porterebbe a verificare prima l'esistenza del file con una \func{stat} per poi crearlo con una \func{creat}; -di nuovo avremmo la possibilità di una race -condition\index{\textit{race~condition}} da parte di un altro processo che -crea lo stesso file fra il controllo e la creazione. +di nuovo avremmo la possibilità di una \textit{race + condition}\itindex{race~condition} da parte di un altro processo che crea lo +stesso file fra il controllo e la creazione. Per questo motivo sono stati introdotti per \func{open} i due flag \const{O\_CREAT} e \const{O\_EXCL}. In questo modo l'operazione di controllo @@ -991,9 +992,9 @@ sull'altro (dato che quello che viene modificato della \textit{file table} a cui entrambi fanno riferimento). L'unica differenza fra due file descriptor duplicati è che ciascuno avrà il suo \textit{file descriptor flag}; a questo proposito va specificato che nel caso -di \func{dup} il flag di \textit{close-on-exec}\index{\textit{close-on-exec}} -(vedi sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl}) viene sempre -cancellato nella copia. +di \func{dup} il flag di \textit{close-on-exec}\itindex{close-on-exec} (vedi +sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl}) viene sempre cancellato +nella copia. L'uso principale di questa funzione è per la redirezione dell'input e dell'output fra l'esecuzione di una \func{fork} e la successiva \func{exec}; @@ -1091,10 +1092,10 @@ per \var{cmd} massimo numero di descrittori consentito. \item[\const{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al valore specificato con \param{arg}. Al momento l'unico bit usato è quello di - \textit{close-on-exec}\index{\textit{close-on-exec}}, identificato dalla - costante \const{FD\_CLOEXEC}, che serve a richiedere che il file venga - chiuso nella esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}). - Ritorna un valore nullo in caso di successo e -1 in caso di errore. + \textit{close-on-exec}\itindex{close-on-exec}, identificato dalla costante + \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella + esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}). Ritorna un + valore nullo in caso di successo e -1 in caso di errore. \item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di \param{fd} o -1 in caso di errore; se \const{FD\_CLOEXEC} è impostato i file descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti (il @@ -1284,8 +1285,10 @@ effettuata attraverso \func{ioctl} in quasi tutte le implementazioni di Unix), qui riportiamo solo i valori di alcuni comandi che sono definiti per ogni file: \begin{basedescript}{\desclabelwidth{2.0cm}} -\item[\const{FIOCLEX}] Imposta il bit di \textit{close on exec}. -\item[\const{FIONCLEX}] Cancella il bit di \textit{close on exec}. +\item[\const{FIOCLEX}] Imposta il flag di + \textit{close-on-exec}\itindex{close-on-exec}. +\item[\const{FIONCLEX}] Cancella il flag di + \textit{close-on-exec}\itindex{close-on-exec}. \item[\const{FIOASYNC}] Abilita l'I/O asincrono. \item[\const{FIONBIO}] Abilita l'I/O in modalità non bloccante. \end{basedescript}