X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=a7f5b0d7d787211d913d9411b70302fde5fd0380;hp=6095c58be49f145cd25548c7051d29b7cc95e77b;hb=8dcd0303a5e4af316f1b8072c77ffc3cb97a0f02;hpb=f331c37c55d5d5cf52d252c5c362307e466a5b0f diff --git a/fileadv.tex b/fileadv.tex index 6095c58..a7f5b0d 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -78,7 +78,7 @@ con la funzione \func{select}, il cui prototipo \bodydesc{La funzione in caso di successo restituisce il numero di file descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual - caso \var{errno} viene impostata ai valori: + caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno degli insiemi. @@ -169,7 +169,8 @@ Come accennato l'interfaccia di \func{select} System V ha introdotto una sua interfaccia per gestire l'\textit{I/O multiplexing}, basata sulla funzione \func{poll},\footnote{la funzione è prevista dallo standard XPG4, ed è stata introdotta in Linux come system - call a partire dal kernel 2.1.23 e dalle \acr{libc} 5.4.28.} il cui prototipo è: + call a partire dal kernel 2.1.23 e dalle \acr{libc} 5.4.28.} il cui +prototipo è: \begin{prototype}{sys/poll.h} {int poll(struct pollfd *ufds, unsigned int nfds, int timeout)} @@ -178,7 +179,7 @@ specificati da \param{ufds}. \bodydesc{La funzione restituisce il numero di file descriptor con attività in caso di successo, o 0 se c'è stato un timeout; in caso di errore viene - restituito -1 ed \var{errno} viene impostata ai valori: + restituito -1 ed \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno degli insiemi. @@ -278,7 +279,7 @@ sostituisce i precedenti, ed aggiunge a \func{select} una nuova funzione \bodydesc{La funzione in caso di successo restituisce il numero di file descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual - caso \var{errno} viene impostata ai valori: + caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno degli insiemi. @@ -308,7 +309,7 @@ del test e riabilitandolo poi grazie all'uso di \param{sigmask}. -\subsection{L'\textsl{I/O asincrono}} +\subsection{L'I/O asincrono} \label{sec:file_asyncronous_io} Una modalità alternativa all'uso dell'\textit{I/O multiplexing} è quella di @@ -388,10 +389,11 @@ implementata sia direttamente nel kernel, che in user space attraverso l'uso di thread. Al momento\footnote{fino ai kernel della serie 2.4.x, nella serie 2.5.x è però iniziato un lavoro completo di riscrittura di tutto il sistema di I/O, che prevede anche l'introduzione di un nuovo layer per l'I/O - asincrono.} esiste una sola versione stabile di questa interfaccia, quella -delle \acr{glibc}, che è realizzata completamente in user space. Esistono -comunque vari progetti sperimentali (come il KAIO della SGI, o i patch di -Benjamin La Haise) che prevedono un supporto diretto da parte del kernel. + asincrono (effettuato a partire dal 2.5.32).} esiste una sola versione +stabile di questa interfaccia, quella delle \acr{glibc}, che è realizzata +completamente in user space. Esistono comunque vari progetti sperimentali +(come il KAIO della SGI, o i patch di Benjamin La Haise) che prevedono un +supporto diretto da parte del kernel. Lo standard prevede che tutte le operazioni di I/O asincrono siano controllate attraverso l'uso di una apposita struttura \type{aiocb} (il cui nome sta per @@ -503,7 +505,7 @@ appena descritta; i rispettivi prototipi sono: \param{aiocbp}. \bodydesc{Le funzioni restituiscono 0 in caso di successo, e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato. \item[\macro{ENOSYS}] La funzione non è implementata. @@ -674,8 +676,8 @@ specifica operazione; il suo prototipo operazioni specificate da \param{list}. \bodydesc{La funzione restituisce 0 se una (o più) operazioni sono state - completate, e -1 in caso di errore nel qual caso \var{errno} viene - impostata ai valori: + completate, e -1 in caso di errore nel qual caso \var{errno} assumerà uno + dei valori: \begin{errlist} \item[\macro{EAGAIN}] Nessuna operazione è stata completata entro \param{timeout}. @@ -706,7 +708,7 @@ lettura o scrittura; il suo prototipo secondo la modalità \param{mode}. \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EAGAIN}] Nessuna operazione è stata completata entro \param{timeout}. @@ -773,8 +775,8 @@ prototipi sono: specificati da \param{vector}. \bodydesc{Le funzioni restituiscono il numero di byte letti o scritti in - caso di successo, e -1 in caso di errore, nel qual caso \var{errno} viene - impostata ai valori: + caso di successo, e -1 in caso di errore, nel qual caso \var{errno} + assumerà uno dei valori: \begin{errlist} \item[\macro{EBADF}] si è specificato un file descriptor sbagliato. \item[\macro{EINVAL}] si è specificato un valore non valido per uno degli @@ -880,7 +882,7 @@ in memoria di un file; il suo prototipo \bodydesc{La funzione restituisce il puntatore alla zona di memoria mappata in caso di successo, e \macro{MAP\_FAILED} (-1) in caso di errore, nel - qual caso \var{errno} viene impostata ai valori: + qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EBADF}] Il file descriptor non è valido, e non si è usato \macro{MAP\_ANONYMOUS}. @@ -1128,7 +1130,7 @@ contenuto della memoria mappata con il file su disco; il suo prototipo Sincronizza i contenuti di una sezione di un file mappato in memoria. \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di - errore nel qual caso \var{errno} viene impostata ai valori: + errore nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EINVAL}] O \param{start} non è multiplo di \macro{PAGESIZE}, o si è specificato un valore non valido per \param{flags}. @@ -1184,7 +1186,7 @@ mappatura della memoria usando la funzione \func{munmap}, il suo prototipo Rilascia la mappatura sulla sezione di memoria specificata. \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di - errore nel qual caso \var{errno} viene impostata ai valori: + errore nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EINVAL}] L'intervallo specificato non ricade in una zona precedentemente mappata. @@ -1249,14 +1251,14 @@ opportune verifiche nei processi, questo verrebbe comunque rispettato. Per poter utilizzare il \textit{mandatory locking} è stato introdotto un utilizzo particolare del bit \acr{suid}. Se si ricorda quanto esposto in -\secref{sec:file_suid_sgid}), esso viene di norma utlizzato per cambiare -l'\textit{effective user ID} con cui viene eseguito un programma, ed è -pertanto sempre associato alla presenza del permesso di esecuzione. Impostando -questo bit su un file senza permesso di esecuzione in un sistema che supporta -il \textit{mandatory locking}, fa sì che quest'ultimo venga attivato per il -file in questione. In questo modo una combinaizone dei permessi -originariamente non contemplata, in quanto senza significato, diventa -l'indicazione della presenza o meno del \textit{mandatory locking}. +\secref{sec:file_suid_sgid}), esso viene di norma utilizzato per cambiare +l'userid effettivo con cui viene eseguito un programma, ed è pertanto sempre +associato alla presenza del permesso di esecuzione. Impostando questo bit su +un file senza permesso di esecuzione in un sistema che supporta il +\textit{mandatory locking}, fa sì che quest'ultimo venga attivato per il file +in questione. In questo modo una combinaizone dei permessi originariamente non +contemplata, in quanto senza significato, diventa l'indicazione della presenza +o meno del \textit{mandatory locking}.