From 72a01c7531873ef703c02afe758c620e956806e8 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 14 Feb 2012 09:05:56 +0000 Subject: [PATCH] Ancora fcntl --- fileio.tex | 53 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/fileio.tex b/fileio.tex index 27681b7..7859510 100644 --- a/fileio.tex +++ b/fileio.tex @@ -1961,7 +1961,7 @@ per \var{cmd} è riportata di seguito: controllo di sessione; a ciascuno di essi è associato un identificatore (un numero positivo analogo al \ids{PID}).} che è preposto alla ricezione dei segnali \signal{SIGIO} (o qualunque altro segnale alternativo impostato - con \const{F\_FSETSIG}) per gli eventi associati al file + con \const{F\_SETSIG}) per gli eventi associati al file descriptor \param{fd}\footnote{il segnale viene usato sia per il \textit{Signal Drive I/O}, che tratteremo in sez.~\ref{sec:file_asyncronous_operation}, che dai vari meccanismi di @@ -1981,20 +1981,30 @@ per \var{cmd} è riportata di seguito: group} che riceverà i segnali \signal{SIGIO} e \signal{SIGURG} per gli eventi associati al file descriptor \param{fd}, ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Come per \const{F\_GETOWN}, per - impostare un \itindex{process~group} \textit{process group} si deve usare + indicare un \itindex{process~group} \textit{process group} si deve usare per \param{arg} un valore negativo, il cui valore assoluto corrisponde - all'identificatore del \itindex{process~group} \textit{process group}. -\item[\const{F\_GETSIG}] restituisce il valore del segnale inviato quando ci - sono dati disponibili in ingresso su un file descriptor aperto ed impostato - per l'I/O asincrono (si veda sez.~\ref{sec:file_asyncronous_io}). Il valore 0 - indica il valore predefinito (che è \signal{SIGIO}), un valore diverso da - zero indica il segnale richiesto, (che può essere anche lo stesso - \signal{SIGIO}). In caso di errore ritorna $-1$. + all'identificatore del \itindex{process~group} \textit{process + group}. L'impostazione è soggetta alle stesse restrizioni presenti sulla + funzione \func{kill} (vedi sez.~\ref{sec:sig_kill_raise}), per cui in + sostanza un utente non privilegiato potrà cioè inviare i segnali solo ad un + processo che gli appartiene. Nel caso di \textit{thread},\footnote{in questo + caso si fa riferimento alla implementazione nativa di Linux delle NTPL, + vedi sez.~\ref{sec:linux_ntpl}. } quando si è impostato un segnale con + \const{F\_SETSIG}, un valore positivo di \param{arg} verrà interpretato come + indicante il \textit{Thread ID} che indica uno specifico \textit{thread} e + non come \textit{Process ID}, dato che in tal caso il \textit{thread} + principale mantiene un valore del \textit{Thread ID} uguale al \ids{PID}. +\item[\const{F\_GETSIG}] restituisce il valore del segnale inviato quando un + file descriptor aperto ed impostato per l'I/O asincrono (si veda + sez.~\ref{sec:file_asyncronous_io}) è pronto per le operazioni di lettura o + scrittura. Il valore 0 indica il valore predefinito, che è \signal{SIGIO}, + un valore diverso da zero indica il segnale richiesto, che può essere anche + lo stesso \signal{SIGIO}. In caso di errore ritorna $-1$. \item[\const{F\_SETSIG}] imposta il segnale da inviare quando diventa possibile effettuare I/O sul file descriptor in caso di I/O asincrono, ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Il valore zero indica di usare il segnale predefinito, \signal{SIGIO}. Un altro - valore diverso da zero (compreso lo stesso \signal{SIGIO}) specifica il + valore diverso da zero, compreso lo stesso \signal{SIGIO}, specifica il segnale voluto; l'uso di un valore diverso da zero permette inoltre, se si è installato il gestore del segnale come \var{sa\_sigaction} usando \const{SA\_SIGINFO}, (vedi sez.~\ref{sec:sig_sigaction}), di rendere @@ -2002,17 +2012,16 @@ per \var{cmd} è riportata di seguito: generato il segnale attraverso i valori restituiti in \struct{siginfo\_t} (come vedremo in sez.~\ref{sec:file_asyncronous_io}).\footnote{i due comandi \const{F\_SETSIG} e \const{F\_GETSIG} sono una estensione specifica di - Linux.} + Linux e sono utilizzabili solo se si è definita la macro + \macro{\_GNU\_SOURCE}.} \item[\const{F\_SETLEASE}] imposta o rimuove un \itindex{file~lease} - \textit{file lease}\footnote{questa è una nuova funzionalità, specifica di - Linux, e presente solo a partire dai kernel della serie 2.4.x, in cui il - processo che detiene un \textit{lease} su un file riceve una notifica - qualora un altro processo cerca di eseguire una \func{open} o una - \func{truncate} su di esso.} sul file descriptor \var{fd} a seconda del - valore del terzo argomento, che in questo caso è un \ctyp{int}, ritorna un - valore nullo in caso di successo o $-1$ in caso di errore. Questa - funzionalità avanzata è trattata in dettaglio in - sez.~\ref{sec:file_asyncronous_lease}. + \textit{file lease} sul file descriptor \var{fd} a seconda del valore del + terzo argomento, che in questo caso è un \ctyp{int}, ritorna un valore nullo + in caso di successo o $-1$ in caso di errore. Questa è una funzionalità + specifica di Linux (vedi sez.~\ref{sec:file_asyncronous_lease}) presente a + partire dai kernel della serie 2.4.x, in cui il processo che detiene un + \textit{lease} su un file riceve una notifica qualora un altro processo + cerchi di eseguire una \func{open} o una \func{truncate} su di esso. \item[\const{F\_GETLEASE}] restituisce il tipo di \itindex{file~lease} \textit{file lease} che il processo detiene nei confronti del file descriptor \var{fd} o $-1$ in caso di errore. Con questo comando il terzo @@ -4019,8 +4028,8 @@ con uno dei valori \const{FSETLOCKING\_INTERNAL} o % LocalWords: fwritable ext freading fwriting buffering setvbuf BUFSIZ setbuf % LocalWords: IONBF IOLBF IOFBF setbuffer setlinebuf flbf fbufsize flushlbf hh % LocalWords: fsync fpurge flockfile ftrylockfile funlockfile files fig flags -% LocalWords: locking fsetlocking type Virtual operation dentry unistd sys AT -% LocalWords: modification hole functions FSETSIG pathname EEXIST CREAT EINTR +% LocalWords: locking fsetlocking type virtual operation dentry unistd sys AT +% LocalWords: modification hole functions pathname EEXIST CREAT EINTR % LocalWords: EISDIR EFBIG EOVERFLOW ELOOP NOFOLLOW ENODEV ENOENT ENOTDIR fork % LocalWords: EMFILE ENAMETOOLONG ENFILE ENOMEM ENOSPC EROFS exec access RDWR % LocalWords: RDONLY ioctl AND ACCMODE creation Denial Service DoS opendir NFS -- 2.30.2