X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=5decd4994f91e0aa80b9e216dee0864c46d77e8f;hp=0863017c1c74a1a54c14b75be656517290420a5f;hb=1bdb3c6f5316edaf8e9943a99c210ecc0ec70751;hpb=da0899b61653d07d75c8df134906261f1afd2485 diff --git a/fileunix.tex b/fileunix.tex index 0863017..5decd49 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -50,10 +50,10 @@ Quando un file viene aperto la funzione \func{open} restituisce questo numero, tutte le ulteriori operazioni saranno compiute specificando questo stesso valore come argomento alle varie funzioni dell'interfaccia. -Per capire come funziona il meccanismo occorre spiegare a grandi linee come è -che il kernel gestisce l'interazione fra processi e file. Il kernel mantiene -sempre un elenco dei processi attivi nella cosiddetta \textit{process table} -ed un elenco dei file aperti nella \textit{file table}. +Per capire come funziona il meccanismo occorre spiegare a grandi linee come il +kernel gestisce l'interazione fra processi e file. Il kernel mantiene sempre +un elenco dei processi attivi nella cosiddetta \textit{process table} ed un +elenco dei file aperti nella \textit{file table}. La \textit{process table} è una tabella che contiene una voce per ciascun processo attivo nel sistema. In Linux ciascuna voce è costituita da una @@ -129,7 +129,7 @@ quindi alla lettura della tastiera). Il secondo file inviati i dati in uscita (sempre nel caso della shell, è associato all'uscita del terminale, e quindi alla scrittura sullo schermo). Il terzo è lo \textit{standard error}, su cui viene inviato l'output relativo agli errori, -ed è anch'esso associato all'uscita del termininale. Lo standard POSIX.1 +ed è anch'esso associato all'uscita del terminale. Lo standard POSIX.1 provvede tre costanti simboliche, definite nell'header \file{unistd.h}, al posto di questi valori numerici: \begin{table}[htb] @@ -253,7 +253,7 @@ usato sempre il file descriptor con il valore pi valore specifica anche una modalità di operazione (vedi sotto), e comporta che \func{open} ritorni immediatamente (l'opzione ha senso solo per le fifo, torneremo questo in \secref{sec:ipc_named_pipe}). \\ - \const{O\_NOCTTY} & se \param{pathname} si riferisce ad un device di + \const{O\_NOCTTY} & se \param{pathname} si riferisce ad un dispositivo di terminale, questo non diventerà il terminale di controllo, anche se il processo non ne ha ancora uno (si veda \secref{sec:sess_ctrl_term}). \\ \const{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi @@ -300,7 +300,7 @@ usato sempre il file descriptor con il valore pi \func{write} bloccherà fino al completamento della scrittura di tutti dati sul sull'hardware sottostante.\\ \const{O\_FSYNC} & sinonimo di \const{O\_SYNC}. \\ - \const{O\_NOATIME} & blocca l'aggiornamento dei tempi dei di accesso dei + \const{O\_NOATIME} & blocca l'aggiornamento dei tempi di accesso dei file (vedi \secref{sec:file_file_times}). In Linux questa opzione non è disponibile per il singolo file ma come opzione per il filesystem in fase di montaggio.\\ @@ -317,9 +317,10 @@ usato sempre il file descriptor con il valore pi file con un nome univoco e la funzione \func{link} per verificarne l'esistenza (vedi \secref{sec:ipc_file_lock}).} -\footnotetext[3]{\textit{Denial of Service}, si chiamano così attacchi miranti - ad impedire un servizio causando una qualche forma di carico eccessivo per - il sistema, che resta bloccato nelle risposte all'attacco.} +\footnotetext[3]{\textit{Denial of Service}\index{DoS}, si chiamano così + attacchi miranti ad impedire un servizio causando una qualche forma di + carico eccessivo per il sistema, che resta bloccato nelle risposte + all'attacco.} \footnotetext[4]{il problema è che NFS non supporta la scrittura in append, ed il kernel deve simularla, ma questo comporta la possibilità di una race @@ -461,7 +462,7 @@ ad un valore qualsiasi con la funzione \funcd{lseek}, il cui prototipo \funcdecl{off\_t lseek(int fd, off\_t offset, int whence)} Imposta la posizione attuale nel file. - \bodydesc{La funzione ritorna valore della posizione corrente in caso di + \bodydesc{La funzione ritorna il valore della posizione corrente in caso di successo e -1 in caso di errore nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} @@ -521,7 +522,7 @@ indefinito. \label{sec:file_read} -Una volta che un file è stato aperto (con il permesso in lettura) su possono +Una volta che un file è stato aperto (con il permesso in lettura) si possono leggere i dati che contiene utilizzando la funzione \funcd{read}, il cui prototipo è: \begin{prototype}{unistd.h}{ssize\_t read(int fd, void * buf, size\_t count)} @@ -712,7 +713,7 @@ confronti dell'accesso allo stesso file da parte di processi diversi. \label{fig:file_mult_acc} \end{figure} -Il primo caso è quello in cui due processi diversi che aprono lo stesso file +Il primo caso è quello in cui due processi diversi aprono lo stesso file su disco; sulla base di quanto visto in \secref{sec:file_fd} avremo una situazione come quella illustrata in \figref{fig:file_mult_acc}: ciascun processo avrà una sua voce nella \textit{file table} referenziata da un @@ -951,7 +952,7 @@ dell'output fra l'esecuzione di una \func{fork} e la successiva \func{exec}; diventa così possibile associare un file (o una pipe) allo standard input o allo standard output (torneremo sull'argomento in \secref{sec:ipc_pipe_use}, quando tratteremo le pipe). Per fare questo in genere occorre prima chiudere -il file che si vuole sostituire, cossicché il suo file descriptor possa esser +il file che si vuole sostituire, cosicché il suo file descriptor possa esser restituito alla chiamata di \func{dup}, come primo file descriptor disponibile. @@ -983,7 +984,7 @@ funzione di controllo dei file \func{fnctl} (che esamineremo in la sintassi \code{fnctl(oldfd, F\_DUPFD, newfd)} e se si usa 0 come valore per \param{newfd} diventa equivalente a \func{dup}. -La sola differenza fra le due funzioni\footnote{a parte la sistassi ed i +La sola differenza fra le due funzioni\footnote{a parte la sintassi ed i diversi codici di errore.} è che \func{dup2} chiude il file descriptor \param{newfd} se questo è già aperto, garantendo che la duplicazione sia effettuata esattamente su di esso, invece \func{fcntl} restituisce il primo @@ -999,7 +1000,7 @@ tutta una serie di operazioni ausiliarie che descriptor, che non riguardano la normale lettura e scrittura di dati, ma la gestione sia delle loro proprietà, che di tutta una serie di ulteriori funzionalità che il kernel può mettere a disposizione.\footnote{ad esempio si - gesticono con questa funzione l'I/O asincrono (vedi + gestiscono con questa funzione l'I/O asincrono (vedi \secref{sec:file_asyncronous_io}) e il file locking\index{file!locking} (vedi \secref{sec:file_locking}).} @@ -1112,7 +1113,7 @@ le tematiche relative all'I/O asincrono sono trattate in maniera esaustiva in Si tenga presente infine che quando si usa la funzione per determinare le modalità di accesso con cui è stato aperto il file (attraverso l'uso del -comando \const{F\_GETFL}) è necessario estrarre i bit corripondenti nel +comando \const{F\_GETFL}) è necessario estrarre i bit corrispondenti nel \textit{file status flag} che si è ottenuto. Infatti la definizione corrente di quest'ultimo non assegna bit separati alle tre diverse modalità \const{O\_RDONLY}, \const{O\_WRONLY} e \const{O\_RDWR}.\footnote{in Linux