X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=f4c8fa647c96a6ec8e555433c8b792322c65cb37;hp=f29b0141962cf91191b3628f333574c97c238ff9;hb=e7010c3fbd41a2de44c7b513c5de6e2c6d7ab4b4;hpb=6dc7c75899f0e3c418212cb0d4071e01118582a0 diff --git a/fileunix.tex b/fileunix.tex index f29b014..f4c8fa6 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -261,34 +261,34 @@ ritorno il file descriptor con il valore pi titolarità del file viste in sez.~\ref{sec:file_ownership_management}. Con questa opzione l'argomento \param{mode} deve essere - specificato. \\ + specificato.\\ \const{O\_EXCL} & Usato in congiunzione con \const{O\_CREAT} fa sì che la precedente esistenza del file diventi un errore\protect\footnotemark\ che fa fallire - \func{open} con \errcode{EEXIST}. \\ + \func{open} con \errcode{EEXIST}.\\ \const{O\_NONBLOCK}& Apre il file in modalità non bloccante, e comporta che \func{open} ritorni immediatamente anche quando dovrebbe bloccarsi (l'opzione ha senso solo per - le fifo, vedi sez.~\ref{sec:ipc_named_pipe}). \\ + le fifo, vedi sez.~\ref{sec:ipc_named_pipe}).\\ \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 sez.~\ref{sec:sess_ctrl_term}). \\ + (si veda sez.~\ref{sec:sess_ctrl_term}).\\ \const{O\_SHLOCK} & Apre il file con uno shared lock (vedi sez.~\ref{sec:file_locking}). Specifica di BSD, - assente in Linux. \\ + assente in Linux.\\ \const{O\_EXLOCK} & Apre il file con un lock esclusivo (vedi sez.~\ref{sec:file_locking}). Specifica di BSD, assente in Linux.\\ \const{O\_TRUNC} & Se usato su un file di dati aperto in scrittura, ne tronca la lunghezza a zero; con un terminale o una fifo viene ignorato, negli altri casi il - comportamento non è specificato. \\ + comportamento non è specificato.\\ \const{O\_NOFOLLOW}& Se \param{pathname} è un link simbolico la chiamata fallisce. Questa è un'estensione BSD aggiunta in Linux dal kernel 2.1.126. Nelle versioni precedenti i link simbolici sono sempre seguiti, e questa opzione è - ignorata. \\ + ignorata.\\ \const{O\_DIRECTORY}&Se \param{pathname} non è una directory la chiamata fallisce. Questo flag è specifico di Linux ed è stato introdotto con il kernel 2.1.126 per evitare dei @@ -297,11 +297,11 @@ ritorno il file descriptor con il valore pi \func{opendir} viene chiamata su una fifo o su un dispositivo associato ad una unità a nastri, non deve dispositivo a nastri; non deve essere utilizzato - al di fuori dell'implementazione di \func{opendir}. \\ - \const{O\_LARGEFILE}&nel caso di sistemi a 32 bit che supportano file di + al di fuori dell'implementazione di \func{opendir}.\\ + \const{O\_LARGEFILE}&Nel caso di sistemi a 32 bit che supportano file di grandi dimensioni consente di aprire file le cui dimensioni non possono essere rappresentate da numeri - a 31 bit. \\ + a 31 bit.\\ \hline \hline % modalità di operazione coi file \const{O\_APPEND} & Il file viene aperto in \itindex{append~mode} @@ -317,24 +317,24 @@ ritorno il file descriptor con il valore pi leggere e quello di \func{write} in caso di impossibilità di scrivere immediatamente. Questa modalità ha senso solo per le fifo e per alcuni file - di dispositivo. \\ + di dispositivo.\\ \const{O\_NDELAY} & In Linux\footnotemark\ è sinonimo di \const{O\_NONBLOCK}.\\ \const{O\_ASYNC} & Apre il file per l'I/O in modalità asincrona (vedi sez.~\ref{sec:file_asyncronous_io}). Quando è impostato viene generato il segnale \const{SIGIO} tutte le volte che sono disponibili dati in input - sul file. \\ + sul file.\\ \const{O\_SYNC} & Apre il file per l'input/output sincrono: ogni \func{write} bloccherà fino al completamento della scrittura di tutti i dati sull'hardware sottostante.\\ - \const{O\_FSYNC} & sinonimo di \const{O\_SYNC}, usato da BSD. \\ + \const{O\_FSYNC} & Sinonimo di \const{O\_SYNC}, usato da BSD.\\ \const{O\_DSYNC} & Variante di I/O sincrono definita da POSIX; presente dal kernel 2.1.130 come sinonimo di - \const{O\_SYNC}. \\ + \const{O\_SYNC}.\\ \const{O\_RSYNC} & Variante analoga alla precedente, trattata allo stesso - modo. \\ + modo.\\ \const{O\_NOATIME} & Blocca l'aggiornamento dei tempi di accesso dei file (vedi sez.~\ref{sec:file_file_times}). Per molti filesystem questa funzionalità non è disponibile per @@ -922,9 +922,9 @@ valore tradizionale, usato da BSD, per l'update dei dati in Linux il valore utilizzato è di 5 secondi; con le nuove versioni\footnote{a partire dal kernel 2.2.8} poi, è il kernel che si occupa direttamente di tutto quanto attraverso il demone interno \cmd{bdflush}, il cui comportamento -può essere controllato attraverso il file \file{/proc/sys/vm/bdflush} (per il -significato dei valori si può leggere la documentazione allegata al kernel in -\file{Documentation/sysctl/vm.txt}). +può essere controllato attraverso il file \procfile{/proc/sys/vm/bdflush} (per +il significato dei valori si può leggere la documentazione allegata al kernel +in \file{Documentation/sysctl/vm.txt}). Quando si vogliono scaricare soltanto i dati di un file (ad esempio essere sicuri che i dati di un database sono stati registrati su disco) si possono @@ -1157,6 +1157,9 @@ l'argomento \param{dirfd}.\footnote{non staremo pertanto a riportarli uno per \label{tab:file_atfunc_corr} \end{table} +% TODO documentare utimesat, introdotta in 2.6.22 +% http://kernelnewbies.org/Linux_2_6_22 + Il comportamento delle nuove funzioni è del tutto analogo a quello delle corrispettive classiche, con la sola eccezione del fatto che se fra i loro argomenti si utilizza un pathname relativo questo sarà risolto rispetto alla @@ -1451,7 +1454,7 @@ il valore dell'argomento \param{request}. Il terzo argomento dipende dall'operazione prescelta; tradizionalmente è specificato come \code{char * argp}, da intendersi come puntatore ad un area di memoria generica,\footnote{all'epoca della creazione di questa funzione infatti ancora - non era stato introdotto il tipo \ctype{void}.} ma per certe operazioni può + non era stato introdotto il tipo \ctyp{void}.} ma per certe operazioni può essere omesso, e per altre è un semplice intero. Normalmente la funzione ritorna zero in caso di successo e $-1$ in caso di @@ -1471,6 +1474,10 @@ elenco di alcuni esempi di esse \item l'impostazione della velocità trasmissione di una linea seriale. \item l'impostazione della frequenza e della durata dei suoni emessi dallo speaker. +\item l'impostazione degli attributi dei file su un filesystem + ext2.\footnote{i comandi \texttt{lsattr} e \texttt{chattr} fanno questo con + delle \func{ioctl} dedicate, usabili solo su questo filesystem e derivati + successivi (come ext3).} \end{itemize*} In generale ogni dispositivo ha un suo insieme di operazioni specifiche @@ -1496,21 +1503,29 @@ seguito\footnote{per l'uso di \func{ioctl} con i socket si veda sez.~\ref{sec:sock_ctrl_func}.} quelle relative ad alcuni casi specifici (ad esempio la gestione dei terminali è effettuata attraverso \func{ioctl} in quasi tutte le implementazioni di Unix), qui riportiamo solo l'elenco delle -operazioni che sono definite per i file ordinari, caratterizzate dal prefisso -\texttt{FIO}: +operazioni che sono predefinite per qualunque file,\footnote{in particolare + queste operazioni sono definite nel kernel a livello generale, e vengono + sempre interpretate per prime, per cui, come illustrato in \cite{LinDevDri}, + eventuali operazioni specifiche che usino lo stesso valore verrebbero + ignorate.} caratterizzate dal prefisso \texttt{FIO}: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\const{FIOCLEX}] imposta il flag di \itindex{close-on-exec} \textit{close-on-exec} sul file, in questo caso, essendo usata come - operazione logica, \func{ioctl} non richiede un terzo argomento. + operazione logica, \func{ioctl} non richiede un terzo argomento, il cui + eventuale valore viene ignorato. \item[\const{FIONCLEX}] cancella il flag di \itindex{close-on-exec} \textit{close-on-exec} sul file, in questo caso, essendo usata come - operazione logica, \func{ioctl} non richiede un terzo argomento. -\item[\const{FIOASYNC}] abilita la modalità di I/O asincrono sul file (vedi - sez.~\ref{sec:file_asyncronous_operation}); il terzo argomento deve essere - un puntatore ad un intero (cioè di tipo \texttt{const int *}). -\item[\const{FIONBIO}] abilita sul file l'I/O in modalità non bloccante; il - terzo argomento deve essere un puntatore ad un intero (cioè di tipo - \texttt{const int *}). + operazione logica, \func{ioctl} non richiede un terzo argomento, il cui + eventuale valore viene ignorato. +\item[\const{FIOASYNC}] abilita o disabilita la modalità di I/O asincrono sul + file (vedi sez.~\ref{sec:file_asyncronous_operation}); il terzo argomento + deve essere un puntatore ad un intero (cioè di tipo \texttt{const int *}) + che contiene un valore logico (un valore nullo disabilita, un valore non + nullo abilita). +\item[\const{FIONBIO}] abilita o disabilita sul file l'I/O in modalità non + bloccante; il terzo argomento deve essere un puntatore ad un intero (cioè di + tipo \texttt{const int *}) che contiene un valore logico (un valore nullo + disabilita, un valore non nullo abilita). \item[\const{FIOSETOWN}] imposta il processo che riceverà i segnali \const{SIGURG} e \const{SIGIO} generati sul file; il terzo argomento deve essere un puntatore ad un intero (cioè di tipo \texttt{const int *}) il cui @@ -1526,14 +1541,23 @@ operazioni che sono definite per i file ordinari, caratterizzate dal prefisso (vedi sez.~\ref{sec:file_epoll}).} il terzo argomento deve essere un puntatore ad un intero (cioè di tipo \texttt{int *}) su cui sarà restituito il valore. -%\item[\const{FIOQSIZE}] che cavolo è ? Get exact space used by quota. +\item[\const{FIOQSIZE}] restituisce la dimensione corrente di un file o di una + directory, mentre se applicata ad un dispositivo fallisce con un errore di + \errcode{ENOTTY}; il terzo argomento deve essere un puntatore ad un intero + (cioè di tipo \texttt{int *}) su cui sarà restituito il valore. \end{basedescript} - - -Si noti però come in questo caso la gran parte di queste operazioni (per -essere precisi le prime sei dell'elenco) siano effettuabili in maniera -generica anche tramite l'uso di \func{fcntl}. +Si noti però come la gran parte di queste operazioni (per essere precisi le +prime sei dell'elenco) siano effettuabili in maniera generica anche tramite +l'uso di \func{fcntl}. Le due funzioni infatti sono molto simili e la presenza +di questa sovrapposizione è principalmente dovuta al fatto che alle origini di +Unix i progettisti considerarono che era necessario trattare diversamente +rispetto alle operazione di controllo delle modalità di I/O file e dispositivi +usando \func{fcntl} per i primi e \func{ioctl} per i +secondi;\footnote{all'epoca tra l'altro i dispositivi che usavano \func{ioctl} + erano sostanzialmente solo i terminali, il che spiega l'uso comune di + \errcode{ENOTTY} come codice di errore.} oggi non è più così ma le due +funzioni sono rimaste. % LocalWords: descriptor system call cap like kernel sez l'inode inode VFS tab @@ -1562,7 +1586,7 @@ generica anche tramite l'uso di \func{fcntl}. % LocalWords: fchownat chown fstatat futimesat utimes linkat mknodat mknod % LocalWords: readlinkat readlink renameat rename symlinkat symlink unlink % LocalWords: mkfifoat mkfifo FDCWD EACCESS dereferenziazione rmdir REMOVEDIR -% LocalWords: epoll +% LocalWords: epoll lsattr chattr FIOQSIZE %%% Local Variables: %%% mode: latex