positivo o non valido per \param{flags}.
\item[\errcode{EMFILE}] si è raggiunto il limite sul numero massimo di
istanze di \textit{epoll} per utente stabilito da
- \sysctlfile{fs/epoll/max\_user\_instances}.
+ \sysctlfiled{fs/epoll/max\_user\_instances}.
\item[\errcode{ENFILE}] si è raggiunto il massimo di file descriptor aperti
nel sistema.
\item[\errcode{ENOMEM}] non c'è sufficiente memoria nel kernel per creare
l'operazione richiesta.
\item[\errcode{ENOSPC}] si è raggiunto il limite massimo di registrazioni
per utente di file descriptor da osservare imposto da
- \sysctlfile{fs/epoll/max\_user\_watches}.
+ \sysctlfiled{fs/epoll/max\_user\_watches}.
\item[\errcode{EPERM}] il file associato a \param{fd} non supporta l'uso di
\textit{epoll}.
\end{errlist}
ad una dimensione identica al valore massimo del numero di file descriptor
utilizzabili, vale a dire impostare il contenuto di
\sysctlfile{kernel/rtsig-max} allo stesso valore del contenuto di
-\sysctlfilem{fs/file-max}.
+\sysctlfile{fs/file-max}.
% TODO fare esempio che usa O_ASYNC
Se il \textit{lease holder} non provvede a rilasciare il \textit{lease} entro
il numero di secondi specificato dal parametro di sistema mantenuto in
-\sysctlfile{fs/lease-break-time} sarà il kernel stesso a rimuoverlo o
+\sysctlfiled{fs/lease-break-time} sarà il kernel stesso a rimuoverlo o
declassarlo automaticamente (questa è una misura di sicurezza per evitare che
un processo blocchi indefinitamente l'accesso ad un file acquisendo un
\textit{lease}). Una volta che un \textit{lease} è stato rilasciato o
delle risorse di sistema è previsto che un utente possa utilizzare un numero
limitato di istanze di \textit{inotify}; il valore di default del limite è di
128, ma questo valore può essere cambiato con \func{sysctl} o usando il file
-\sysctlfile{fs/inotify/max\_user\_instances}.
+\sysctlfiled{fs/inotify/max\_user\_instances}.
Dato che questo file descriptor non è associato a nessun file o directory
reale, l'inconveniente di non poter smontare un filesystem i cui file sono
directory che si vogliono tenere sotto osservazione,\footnote{anche in questo
caso c'è un limite massimo che di default è pari a 8192, ed anche questo
valore può essere cambiato con \func{sysctl} o usando il file
- \sysctlfile{fs/inotify/max\_user\_watches}.} e si utilizzerà sempre un solo
+ \sysctlfiled{fs/inotify/max\_user\_watches}.} e si utilizzerà sempre un solo
file descriptor.
Il tipo di evento che si vuole osservare deve essere specificato
\footnotetext{la coda di notifica ha una dimensione massima che viene
controllata dal parametro di sistema
- \sysctlfile{fs/inotify/max\_queued\_events}, che indica il numero massimo di
+ \sysctlfiled{fs/inotify/max\_queued\_events}, che indica il numero massimo di
eventi che possono essere mantenuti sulla stessa; quando detto valore viene
ecceduto gli ulteriori eventi vengono scartati, ma viene comunque generato
un evento di tipo \const{IN\_Q\_OVERFLOW}.}
\textbf{\var{st\_mode}} bit & \textbf{Significato} \\
\hline
\hline
- \constd{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\
- \constd{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\
- \constd{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\
+ \const{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\
+ \const{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\
+ \const{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\
\hline
- \constd{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\
- \constd{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\
- \constd{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\
+ \const{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\
+ \const{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\
+ \const{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\
\hline
- \constd{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\
- \constd{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\
- \constd{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\
+ \const{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\
+ \const{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\
+ \const{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\
\hline
\end{tabular}
\caption{I bit dei permessi di accesso ai file, come definiti in
\textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \constd{S\_ISUID} & 04000 & Set user ID bit.\\
- \constd{S\_ISGID} & 02000 & Set group ID bit.\\
- \constd{S\_ISVTX} & 01000 & Sticky bit.\\
+ \const{S\_ISUID} & 04000 & Set user ID bit.\\
+ \const{S\_ISGID} & 02000 & Set group ID bit.\\
+ \const{S\_ISVTX} & 01000 & Sticky bit.\\
\hline
- \constd{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
- \constd{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
- \constd{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\
- \constd{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\
+ \const{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
+ \const{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
+ \const{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\
+ \const{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\
\hline
- \constd{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\
- \constd{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\
- \constd{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\
- \constd{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\
+ \const{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\
+ \const{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\
+ \const{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\
+ \const{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\
\hline
- \constd{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\
- \constd{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\
- \constd{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\
- \constd{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\
+ \const{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\
+ \const{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\
+ \const{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\
+ \const{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\
\hline
\end{tabular}
\caption{Valori delle costanti usate per indicare i vari bit di
Per i kernel fino al 2.6.25, o se non si attiva il supporto per le
\textit{file capabilities}, il \textit{capabilities bounding set} è un
parametro generale di sistema, il cui valore viene riportato nel file
-\sysctlfile{kernel/cap-bound}. Il suo valore iniziale è definito in sede di
+\sysctlfiled{kernel/cap-bound}. Il suo valore iniziale è definito in sede di
compilazione del kernel, e da sempre ha previsto come default la presenza di
tutte le \textit{capabilities} eccetto \const{CAP\_SETPCAP}. In questa
situazione solo il primo processo eseguito nel sistema (quello con
Con il kernel 2.6.25 e le \textit{file capabilities} il \textit{bounding set}
è diventato una proprietà di ciascun processo, che viene propagata invariata
sia attraverso una \func{fork} che una \func{exec}. In questo caso il file
-\sysctlfilem{kernel/cap-bound} non esiste e \texttt{init} non ha nessun
+\sysctlfile{kernel/cap-bound} non esiste e \texttt{init} non ha nessun
ruolo speciale, inoltre in questo caso all'avvio il valore iniziale prevede la
presenza di tutte le capacità (compresa \const{CAP\_SETPCAP}).
(\const{IOPRIO\_CLASS\_RT} e prima del kernel 2.6.25 anche
\const{IOPRIO\_CLASS\_IDLE}) per lo scheduling dell'I/O (vedi
sez.~\ref{sec:io_priority}), superare il limite di sistema sul numero massimo
-di file aperti,\footnote{quello indicato da \sysctlfile{fs/file-max}.}
+di file aperti,\footnote{quello indicato da \sysctlfiled{fs/file-max}.}
effettuare operazioni privilegiate sulle chiavi mantenute dal kernel (vedi
sez.~\ref{sec:keyctl_management}), usare la funzione \func{lookup\_dcookie},
usare \const{CLONE\_NEWNS} con \func{unshare} e \func{clone}, (vedi
kernel queste operazioni vengono gestite direttamente dal sistema della
memoria virtuale, attraverso opportuni \textit{task} interni al kernel il cui
comportamento può essere controllato attraverso il file
-\sysctlfile{vm/bdflush}.\footnote{per il significato dei valori che si possono
+\sysctlfiled{vm/bdflush}.\footnote{per il significato dei valori che si possono
scrivere in questo file si consulti la documentazione allegata ai sorgenti
del kernel nel file \file{Documentation/sysctl/vm.txt}, trattandosi di
argomenti di natura sistemistica non li prenderemo in esame.} Si tenga
\const{F\_GETPIPE\_SZ}. I processi non privilegiati\footnote{per la
precisione occorre la capacità \const{CAP\_SYS\_RESOURCE}.} non possono
impostare un valore valore superiore a quello indicato da
- \sysctlfile{fs/pipe-size-max}. Il comando è specifico di Linux, è
+ \sysctlfiled{fs/pipe-size-max}. Il comando è specifico di Linux, è
disponibile solo a partire dal kernel 2.6.35, ed è utilizzabile solo se si è
definita la macro \macro{\_GNU\_SOURCE}.
\const{SHMMNI}, e potevano essere cambiati (come tutti gli altri limiti
relativi al \textit{SysV-IPC}) solo con una ricompilazione del kernel. A
partire dal kernel 2.4.x è possibile cambiare questi valori a sistema attivo
-scrivendo sui file \sysctlrelfile{kernel}{shmmni},
-\sysctlrelfile{kernel}{msgmni} e \sysctlrelfile{kernel}{sem} di
+scrivendo sui file \sysctlrelfiled{kernel}{shmmni},
+\sysctlrelfiled{kernel}{msgmni} e \sysctlrelfiled{kernel}{sem} di
\file{/proc/sys/kernel} o con l'uso di \func{sysctl}.
\begin{figure}[!htb]
definiti staticamente e corrispondenti alle prime tre costanti riportate in
tab.~\ref{tab:ipc_msg_limits}. Come accennato però con tutte le versioni più
recenti del kernel con Linux è possibile modificare questi limiti attraverso
-l'uso di \func{sysctl} o scrivendo nei file \sysctlrelfile{kernel}{msgmax},
-\sysctlrelfile{kernel}{msgmnb} e \sysctlrelfile{kernel}{msgmni} di
+l'uso di \func{sysctl} o scrivendo nei file \sysctlrelfiled{kernel}{msgmax},
+\sysctlrelfiled{kernel}{msgmnb} e \sysctlrelfiled{kernel}{msgmni} di
\file{/proc/sys/kernel/}.
\itindbeg{linked~list}
\texttt{/proc/sys/fs/mqueue}, in particolare i file che controllano i valori
dei limiti sono:
\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\sysctlfile{fs/mqueue/msg\_max}] Indica il valore massimo del numero di
+\item[\sysctlfiled{fs/mqueue/msg\_max}] Indica il valore massimo del numero di
messaggi in una coda e agisce come limite superiore per il valore di
\var{attr->mq\_maxmsg} in \func{mq\_open}. Il suo valore di default è 10. Il
valore massimo è \const{HARD\_MAX} che vale \code{(131072/sizeof(void *))},
precisamente con la \textit{capability} \const{CAP\_SYS\_RESOURCE}) ma
\const{HARD\_MAX} resta comunque non superabile.
-\item[\sysctlfile{fs/mqueue/msgsize\_max}] Indica il valore massimo della
+\item[\sysctlfiled{fs/mqueue/msgsize\_max}] Indica il valore massimo della
dimensione in byte di un messaggio sulla coda ed agisce come limite
superiore per il valore di \var{attr->mq\_msgsize} in \func{mq\_open}. Il
suo valore di default è 8192. Il valore massimo è 1048576 ed il valore
processi con privilegi amministrativi (con la \textit{capability}
\const{CAP\_SYS\_RESOURCE}).
-\item[\sysctlfile{fs/mqueue/queues\_max}] Indica il numero massimo di code di
+\item[\sysctlfiled{fs/mqueue/queues\_max}] Indica il numero massimo di code di
messaggi creabili in totale sul sistema, il valore di default è 256 ma si
può usare un valore qualunque fra $0$ e \const{INT\_MAX}. Il limite non
viene applicato ai processi con privilegi amministrativi (cioè con la
\newcommand{\ctyp}[1]{\texttt{#1}} % C standard type
\newcommand{\headfile}[1]{%
-%\index{file!include!menzione{#1}@{{\tt {#1}}}}\texttt{#1}%
\texttt{#1}%
} % header file name
-
\newcommand{\headfiled}[1]{%
\index{file!include!{#1}@{{\tt {#1}}}}\texttt{#1}%
} % header file name
\newcommand{\procfile}[1]{%
\index{file!filesystem~\texttt{/proc}!{#1}@{{\tt {#1}}}}\texttt{#1}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
} % /proc file name
\newcommand{\procfilem}[1]{%
\texttt{#1}%
%\index{file!filesystem~\texttt{/proc}!{#1}@{{\tt {#1}}}}\texttt{#1}%
%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
} % /proc file name
+
\newcommand{\sysfile}[1]{%
+\texttt{#1}%
+%\index{file!di~sistema!{#1}@{{\tt {#1}}}}\texttt{#1}%
+} % system file name
+\newcommand{\sysfiled}[1]{%
\index{file!di~sistema!{#1}@{{\tt {#1}}}}\texttt{#1}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
} % system file name
+
\newcommand{\conffile}[1]{%
\texttt{#1}%
%\index{file!di~configurazione!{#1}@{{\tt {#1}}}}\texttt{#1}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
} % configuration file name
\newcommand{\conffiled}[1]{%
\index{file!di~configurazione!{#1}@{{\tt {#1}}}}\texttt{#1}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
} % configuration file name
\newcommand{\conffilebeg}[1]{%
\index{file!di~configurazione!{#1}@{{\tt {#1}}}}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
} % configuration file name
\newcommand{\conffileend}[1]{%
\index{file!di~configurazione!{#1}@{{\tt {#1}}}}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
} % configuration file name
+
\newcommand{\procrelfile}[2]{%
\index{file!filesystem~\texttt{/proc}!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
}
-\newcommand{\sysctlfile}[1]{%
+\newcommand{\sysctlfiled}[1]{%
\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1}@{{\tt {#1}}}}\texttt{/proc/sys/#1}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
-} % /proc/sys file name
+} % /proc/sys file
-\newcommand{\sysctlfilem}[1]{%
+\newcommand{\sysctlfile}[1]{%
\texttt{/proc/sys/#1}%
%\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1}@{{\tt {#1}}}}\texttt{/proc/sys/#1}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
-} % /proc/sys file name
+} % /proc/sys file
\newcommand{\sysctlrelfile}[2]{%
-\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}%
-%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}%
+\texttt{#2}%
+%\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}%
} % /proc/sys file name
+\newcommand{\sysctlrelfiled}[2]{%
+\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}%
+} % /proc/sys file name
\newcommand{\kstruct}[1]{%
\texttt{#1}%
%\index{struttura dati del kernel!{#1}@{{\tt {#1}}}}\texttt{#1}%
-%\index{#1@{{\tt {#1}} (struttura dati)}}\texttt{#1}%
-} % struttura dati
+} % struttura dati del kernel
\newcommand{\kstructd}[1]{%
\index{struttura dati del kernel!{#1}@{{\tt {#1}}}}\texttt{#1}%
%\index{struttura dati del kernel!{#1}@{{\tt {#1}}}!definizione di}\texttt{#1}%
-%\index{#1@{{\tt {#1}} (struttura dati)}!definizione di}\texttt{#1}%
} % struttura dati
+
\newcommand{\typed}[1]{%
\index{tipo di dato!{#1}@{{\tt {#1}}}}\texttt{#1}%
%\index{#1@{{\tt {#1}} (tipo)}}\texttt{#1}%
\constd{PID\_MAX} nei file \file{threads.h} e \file{fork.c} dei sorgenti del
kernel, con il 2.6.x e la nuova interfaccia per i \textit{thread} anche il
meccanismo di allocazione dei \ids{PID} è stato modificato ed il valore
- massimo è impostabile attraverso il file \sysctlfile{kernel/pid\_max} e di
+ massimo è impostabile attraverso il file \sysctlfiled{kernel/pid\_max} e di
default vale 32768.} che serve a riservare i \ids{PID} più bassi ai processi
eseguiti direttamente dal kernel. Per questo motivo, come visto in
sez.~\ref{sec:proc_hierarchy}, il processo di avvio (\cmd{init}) ha sempre il
\constd{WEXITED} & Ritorna quando un processo figlio è terminato.\\
\constd{WNOHANG} & Ritorna immediatamente anche se non c'è niente da
notificare.\\
- \constd{WSTOPPED} & Ritorna quando un processo figlio è stato fermato.\\
- \constd{WCONTINUED}& Ritorna quando un processo figlio che era stato
+ \constd{WSTOPPED} & Ritorna quando un processo figlio è stato fermato.\\
+ \const{WCONTINUED} & Ritorna quando un processo figlio che era stato
fermato ha ripreso l'esecuzione.\\
\constd{WNOWAIT} & Lascia il processo ancora in attesa di ricezione, così
che una successiva chiamata possa di nuovo riceverne
probabile che non il relativo supporto non sia disponibile. Se il programma è
in formato ELF per caricare le librerie dinamiche viene usato l'interprete
indicato nel segmento \constd{PT\_INTERP} previsto dal formato stesso, in
-genere questo è \sysfile{/lib/ld-linux.so.1} per programmi collegati con la
-\acr{libc5}, e \sysfile{/lib/ld-linux.so.2} per programmi collegati con la
+genere questo è \sysfiled{/lib/ld-linux.so.1} per programmi collegati con la
+\acr{libc5}, e \sysfiled{/lib/ld-linux.so.2} per programmi collegati con la
\acr{glibc}.
Infine nel caso il programma che si vuole eseguire sia uno script e non un
necessita di privilegi aggiuntivi, ed eventualmente tornare indietro.
Come esempio per chiarire l'uso di queste funzioni prendiamo quello con cui
-viene gestito l'accesso al file \sysfile{/var/run/utmp}. In questo file viene
+viene gestito l'accesso al file \sysfiled{/var/run/utmp}. In questo file viene
registrato chi sta usando il sistema al momento corrente; chiaramente non può
essere lasciato aperto in scrittura a qualunque utente, che potrebbe
falsificare la registrazione. Per questo motivo questo file (e l'analogo
-\sysfile{/var/log/wtmp} su cui vengono registrati login e logout) appartengono
+\sysfiled{/var/log/wtmp} su cui vengono registrati login e logout) appartengono
ad un gruppo dedicato (in genere \acr{utmp}) ed i programmi che devono
accedervi (ad esempio tutti i programmi di terminale in X, o il programma
\cmd{screen} che crea terminali multipli su una console) appartengono a questo
cambiato ed un processo che chiama la funzione viene inserito nella lista dei
processi inattivo, con un tempo molto maggiore.\footnote{è comunque possibile
ripristinare un comportamento analogo al precedente scrivendo il valore 1
- nel file \sysctlfile{kernel/sched\_compat\_yield}.}
+ nel file \sysctlfiled{kernel/sched\_compat\_yield}.}
L'uso delle funzione nella programmazione ordinaria può essere utile e
migliorare le prestazioni generali del sistema quando si è appena rilasciata
Il comportamento di default prevede che per tutti i processi si applichi la
politica generale di sistema definita nel file
- \sysctlfile{vm/memory\_failure\_early\_kill}, ma specificando
+ \sysctlfiled{vm/memory\_failure\_early\_kill}, ma specificando
per \param{arg2} il valore \constd{PR\_MCE\_KILL\_SET} è possibile impostare
con il contenuto di \param{arg3} una politica specifica del processo
chiamante. Si può tornare alla politica di default del sistema utilizzando
Per questo l'esecuzione di una riga di comando può originare più di un
processo, quindi nella gestione del \textit{job control} non si può far
riferimento ai singoli processi. Per questo il kernel prevede la possibilità
-di raggruppare più processi in un cosiddetto \itindex{process~group}
-\textit{process group} (detto anche \textsl{raggruppamento di processi}, vedi
+di raggruppare più processi in un cosiddetto \textit{process group} (detto
+anche \textsl{raggruppamento di processi}, vedi
sez.~\ref{sec:sess_proc_group}). Deve essere cura della shell far sì che tutti
i processi che originano da una stessa riga di comando appartengano allo
stesso raggruppamento di processi, in modo che le varie funzioni di controllo,
ed i segnali inviati dal terminale, possano fare riferimento ad esso.
In generale all'interno di una sessione avremo un eventuale (può non esserci)
-\itindex{process~group} \textit{process group} in \textit{foreground}, che
-riunisce i processi che possono accedere al terminale, e più
-\itindex{process~group} \textit{process group} in \textit{background}, che non
-possono accedervi. Il \textit{job control} prevede che quando un processo
-appartenente ad un raggruppamento in \textit{background} cerca di accedere al
-terminale, venga inviato un segnale a tutti i processi del raggruppamento, in
-modo da bloccarli (vedi sez.~\ref{sec:sess_ctrl_term}).
+\textit{process group} in \textit{foreground}, che riunisce i processi che
+possono accedere al terminale, e più \textit{process group} in
+\textit{background}, che non possono accedervi. Il \textit{job control}
+prevede che quando un processo appartenente ad un raggruppamento in
+\textit{background} cerca di accedere al terminale, venga inviato un segnale a
+tutti i processi del raggruppamento, in modo da bloccarli (vedi
+sez.~\ref{sec:sess_ctrl_term}).
Un comportamento analogo si ha anche per i segnali generati dai comandi di
tastiera inviati dal terminale, che vengono inviati a tutti i processi del
\end{funcproto}
La funzione assegna al \ids{PGID} il valore del \ids{PID} del processo
-corrente, rendendolo in tal modo \itindex{process~group~leader} \textit{group
- leader} di un nuovo raggruppamento. Tutti i successivi processi da esso
-creati apparterranno (a meno di non cambiare di nuovo il \ids{PGID}) al nuovo
-raggruppamento.
+corrente, rendendolo in tal modo \textit{group leader} di un nuovo
+raggruppamento. Tutti i successivi processi da esso creati apparterranno (a
+meno di non cambiare di nuovo il \ids{PGID}) al nuovo raggruppamento.
La versione illustrata è quella usata nella definizione di POSIX.1, in BSD
viene usata una funzione con questo nome, che però è identica a
terminale di controllo (torneremo sull'argomento in
sez.~\ref{sec:sess_ctrl_term}) cui fosse in precedenza associato.
-La funzione ha successo soltanto se il processo non è già
-\itindex{process~group~leader} leader di un \textit{process group}, per cui
-per usarla di norma si esegue una \func{fork} e si esce, per poi chiamare
-\func{setsid} nel processo figlio, in modo che, avendo questo lo stesso
-\ids{PGID} del padre ma un \ids{PID} diverso, non ci siano possibilità di
-errore.
+La funzione ha successo soltanto se il processo non è già leader di un
+\textit{process group}, per cui per usarla di norma si esegue una \func{fork}
+e si esce, per poi chiamare \func{setsid} nel processo figlio, in modo che,
+avendo questo lo stesso \ids{PGID} del padre ma un \ids{PID} diverso, non ci
+siano possibilità di errore.
Potrebbe sorgere il dubbio che, per il riutilizzo dei valori dei \ids{PID}
fatto nella creazione dei nuovi processi (vedi sez.~\ref{sec:proc_pid}), il
aprendo il terminale di controllo con il flag \const{O\_NOCTTY} (vedi
sez.~\ref{sec:file_open_close}). In questo Linux segue la semantica di SVr4;
BSD invece richiede che il terminale venga allocato esplicitamente con una
-\func{ioctl} con il comando \const{TIOCSCTTY}.
+\func{ioctl} con il comando \constd{TIOCSCTTY}.
In genere, a meno di redirezioni, nelle sessioni di lavoro il terminale di
controllo è associato ai file standard (input, output ed error) dei processi
(e relativi raggruppamenti) che non fanno parte del gruppo di
\textit{foreground} sono detti in \textit{background}; se uno si essi cerca di
accedere al terminale di controllo provocherà l'invio da parte del kernel di
-uno dei due segnali \signal{SIGTTIN} o \signal{SIGTTOU} (a seconda che l'accesso
-sia stato in lettura o scrittura) a tutto il suo \itindex{process~group}
-\textit{process group}; dato che il comportamento di default di questi segnali
-(si riveda quanto esposto in sez.~\ref{sec:sig_job_control}) è di fermare il
-processo, di norma questo comporta che tutti i membri del gruppo verranno
-fermati, ma non si avranno condizioni di errore.\footnote{la shell in genere
- notifica comunque un avvertimento, avvertendo la presenza di processi
- bloccati grazie all'uso di \func{waitpid}.} Se però si bloccano o ignorano i
-due segnali citati, le funzioni di lettura e scrittura falliranno con un
-errore di \errcode{EIO}.
+uno dei due segnali \signal{SIGTTIN} o \signal{SIGTTOU} (a seconda che
+l'accesso sia stato in lettura o scrittura) a tutto il suo \textit{process
+ group}; dato che il comportamento di default di questi segnali (si riveda
+quanto esposto in sez.~\ref{sec:sig_job_control}) è di fermare il processo, di
+norma questo comporta che tutti i membri del gruppo verranno fermati, ma non
+si avranno condizioni di errore.\footnote{la shell in genere notifica comunque
+ un avvertimento, avvertendo la presenza di processi bloccati grazie all'uso
+ di \func{waitpid}.} Se però si bloccano o ignorano i due segnali citati, le
+funzioni di lettura e scrittura falliranno con un errore di \errcode{EIO}.
In genere la funzione viene chiamata da un processo che è gruppo di
\textit{foreground} per passare l'accesso al terminale ad altri processi,
al file descriptor \param{fd}, che deve essere un terminale, restituendolo
come risultato. Sia questa funzione che la precedente sono state introdotte
con lo standard POSIX.1-2001, ma su Linux sono realizzate utilizzando le
-operazioni di \func{ioctl} con i comandi \const{TIOCGPGRP} e
-\const{TIOCSPGRP}.
+operazioni di \func{ioctl} con i comandi \constd{TIOCGPGRP} e
+\constd{TIOCSPGRP}.
Si noti come entrambe le funzioni usino come argomento il valore di un file
descriptor, il risultato comunque non dipende dal file descriptor che si usa
ma solo dal terminale cui fa riferimento. Il kernel inoltre permette a ciascun
processo di accedere direttamente al suo terminale di controllo attraverso il
file speciale \file{/dev/tty}, che per ogni processo è un sinonimo per il
-proprio terminale di controllo. Questo consente anche a processi che possono
+proprio terminale di controllo. Questo consente anche a processi che possono
aver rediretto l'output di accedere al terminale di controllo, pur non
disponendo più del file descriptor originario; un caso tipico è il programma
\cmd{crypt} che accetta la redirezione sullo \textit{standard input} di un
Questa è la situazione in cui si ha quello che viene chiamato un
\itindex{process~group~orphaned} \textit{orphaned process group}. Lo standard
-POSIX.1 lo definisce come un \itindex{process~group} \textit{process group} i
-cui processi hanno come padri esclusivamente o altri processi nel
-raggruppamento, o processi fuori della sessione. Lo standard prevede inoltre
-che se la terminazione di un processo fa sì che un raggruppamento di processi
-diventi orfano e se i suoi membri sono bloccati, ad essi vengano inviati in
-sequenza i segnali di \signal{SIGHUP} e \signal{SIGCONT}.
+POSIX.1 lo definisce come un \textit{process group} i cui processi hanno come
+padri esclusivamente o altri processi nel raggruppamento, o processi fuori
+della sessione. Lo standard prevede inoltre che se la terminazione di un
+processo fa sì che un raggruppamento di processi diventi orfano e se i suoi
+membri sono bloccati, ad essi vengano inviati in sequenza i segnali di
+\signal{SIGHUP} e \signal{SIGCONT}.
La definizione può sembrare complicata, e a prima vista non è chiaro cosa
tutto ciò abbia a che fare con il problema della terminazione del processo di
controllo. Consideriamo allora cosa avviene di norma nel \textit{job
control}: una sessione viene creata con \func{setsid} che crea anche un
-nuovo \itindex{process~group} \textit{process group}. Per definizione
-quest'ultimo è sempre \itindex{process~group~orphaned} \textsl{orfano}, dato
-che il padre del leader di sessione è fuori dalla stessa e il nuovo
-\textit{process group} \itindex{process~group} contiene solo il leader di
-sessione. Questo è un caso limite, e non viene emesso nessun segnale perché
-quanto previsto dallo standard riguarda solo i raggruppamenti che diventano
-orfani in seguito alla terminazione di un processo.\footnote{l'emissione dei
- segnali infatti avviene solo nella fase di uscita del processo, come una
- delle operazioni legate all'esecuzione di \func{\_exit}, secondo quanto
- illustrato in sez.~\ref{sec:proc_termination}.}
+nuovo \textit{process group}. Per definizione quest'ultimo è sempre
+\textsl{orfano}, dato che il padre del leader di sessione è fuori dalla stessa
+e il nuovo \textit{process group} contiene solo il leader di sessione. Questo
+è un caso limite, e non viene emesso nessun segnale perché quanto previsto
+dallo standard riguarda solo i raggruppamenti che diventano orfani in seguito
+alla terminazione di un processo.\footnote{l'emissione dei segnali infatti
+ avviene solo nella fase di uscita del processo, come una delle operazioni
+ legate all'esecuzione di \func{\_exit}, secondo quanto illustrato in
+ sez.~\ref{sec:proc_termination}.}
Il leader di sessione provvederà a creare nuovi raggruppamenti che a questo
punto non sono orfani in quanto esso resta padre per almeno uno dei processi
\texttt{systemd}, ma per quanto trattato in questa sezione il risultato
finale non cambia, si avrà comunque il lancio di un programma che consenta
l'accesso al terminale.} questa prevede che \cmd{init} legga dal file di
-configurazione \conffile{/etc/inittab} quali programmi devono essere lanciati,
+configurazione \conffiled{/etc/inittab} quali programmi devono essere lanciati,
ed in quali modalità, a seconda del cosiddetto \textit{run level}, anch'esso
definito nello stesso file.
Quando viene lanciato da \cmd{init} il programma parte con i privilegi di
amministratore e con un ambiente vuoto; \cmd{getty} si cura di chiamare
-\func{setsid} per creare una nuova sessione ed un nuovo
-\itindex{process~group} \textit{process group}, e di aprire il terminale (che
-così diventa il terminale di controllo della sessione) in lettura sullo
-\textit{standard input} ed in scrittura sullo \textit{standard output} e sullo
-\textit{standard error}; inoltre effettuerà, qualora servano, ulteriori
-impostazioni.\footnote{ad esempio, come qualcuno si sarà accorto scrivendo un
- nome di login in maiuscolo, può effettuare la conversione automatica
- dell'input in minuscolo, ponendosi in una modalità speciale che non
- distingue fra i due tipi di caratteri (a beneficio di alcuni vecchi
- terminali che non supportavano le minuscole).} Alla fine il programma
-stamperà un messaggio di benvenuto per poi porsi in attesa dell'immissione del
-nome di un utente.
+\func{setsid} per creare una nuova sessione ed un nuovo \textit{process
+ group}, e di aprire il terminale (che così diventa il terminale di controllo
+della sessione) in lettura sullo \textit{standard input} ed in scrittura sullo
+\textit{standard output} e sullo \textit{standard error}; inoltre effettuerà,
+qualora servano, ulteriori impostazioni.\footnote{ad esempio, come qualcuno si
+ sarà accorto scrivendo un nome di login in maiuscolo, può effettuare la
+ conversione automatica dell'input in minuscolo, ponendosi in una modalità
+ speciale che non distingue fra i due tipi di caratteri (a beneficio di
+ alcuni vecchi terminali che non supportavano le minuscole).} Alla fine il
+programma stamperà un messaggio di benvenuto per poi porsi in attesa
+dell'immissione del nome di un utente.
Una volta che si sia immesso il nome di login \cmd{getty} esegue direttamente
il programma \cmd{login} con una \func{execle}, passando come argomento la
\begin{enumerate*}
\item Eseguire una \func{fork} e terminare immediatamente il processo padre
proseguendo l'esecuzione nel figlio. In questo modo si ha la certezza che
- il figlio non è un \itindex{process~group~leader} \textit{process group
- leader}, (avrà il \ids{PGID} del padre, ma un \ids{PID} diverso) e si può
- chiamare \func{setsid} con successo. Inoltre la shell considererà terminato
- il comando all'uscita del padre.
+ il figlio non è un \textit{process group leader}, (avrà il \ids{PGID} del
+ padre, ma un \ids{PID} diverso) e si può chiamare \func{setsid} con
+ successo. Inoltre la shell considererà terminato il comando all'uscita del
+ padre.
\item Eseguire \func{setsid} per creare una nuova sessione ed un nuovo
raggruppamento di cui il processo diventa automaticamente il leader, che
però non ha associato nessun terminale di controllo.
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{LOG\_AUTH} & Messaggi relativi ad autenticazione e sicurezza,
- obsoleto, è sostituito da \const{LOG\_AUTHPRIV}.\\
- \const{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\
- \const{LOG\_CRON} & Messaggi dei demoni di gestione dei comandi
- programmati (\cmd{cron} e \cmd{at}).\\
- \const{LOG\_DAEMON} & Demoni di sistema.\\
- \const{LOG\_FTP} & Servizio FTP.\\
- \const{LOG\_KERN} & Messaggi del kernel.\\
- \const{LOG\_LOCAL0} & Riservato all'amministratore per uso locale.\\
+ \constd{LOG\_AUTH} & Messaggi relativi ad autenticazione e sicurezza,
+ obsoleto, è sostituito da \const{LOG\_AUTHPRIV}.\\
+ \constd{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\
+ \constd{LOG\_CRON} & Messaggi dei demoni di gestione dei comandi
+ programmati (\cmd{cron} e \cmd{at}).\\
+ \constd{LOG\_DAEMON} & Demoni di sistema.\\
+ \constd{LOG\_FTP} & Servizio FTP.\\
+ \constd{LOG\_KERN} & Messaggi del kernel.\\
+ \constd{LOG\_LOCAL0} & Riservato all'amministratore per uso locale.\\
\hspace{.5cm}$\vdots$ & \hspace{3cm}$\vdots$\\
- \const{LOG\_LOCAL7} & Riservato all'amministratore per uso locale.\\
- \const{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti.\\
- \const{LOG\_MAIL} & Messaggi del sistema di posta elettronica.\\
- \const{LOG\_NEWS} & Messaggi del sistema di gestione delle news
+ \constd{LOG\_LOCAL7} & Riservato all'amministratore per uso locale.\\
+ \constd{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti.\\
+ \constd{LOG\_MAIL} & Messaggi del sistema di posta elettronica.\\
+ \constd{LOG\_NEWS} & Messaggi del sistema di gestione delle news
(USENET).\\
- \const{LOG\_SYSLOG} & Messaggi generati dal demone di gestione del
+ \constd{LOG\_SYSLOG} & Messaggi generati dal demone di gestione del
\textit{syslog}.\\
- \const{LOG\_USER} & Messaggi generici a livello utente.\\
- \const{LOG\_UUCP} & Messaggi del sistema UUCP (\textit{Unix to Unix
+ \constd{LOG\_USER} & Messaggi generici a livello utente.\\
+ \constd{LOG\_UUCP} & Messaggi del sistema UUCP (\textit{Unix to Unix
CoPy}), ormai in disuso.\\
\hline
\end{tabular}
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
-\const{LOG\_CONS} & Scrive sulla console in caso di errore nell'invio del
- messaggio al sistema del \textit{syslog}. \\
-\const{LOG\_NDELAY} & Apre la connessione al sistema del \textit{syslog}
- subito invece di attendere l'invio del primo messaggio.\\
-\const{LOG\_NOWAIT} & Non usato su Linux, su altre piattaforme non attende i
- processi figli creati per inviare il messaggio.\\
-\const{LOG\_ODELAY} & Attende il primo messaggio per aprire la connessione al
- sistema del \textit{syslog}.\\
-\const{LOG\_PERROR} & Stampa anche su \file{stderr} (non previsto in
- POSIX.1-2001).\\
-\const{LOG\_PID} & Inserisce nei messaggi il \ids{PID} del processo
- chiamante.\\
+ \constd{LOG\_CONS} & Scrive sulla console in caso di errore nell'invio del
+ messaggio al sistema del \textit{syslog}. \\
+ \constd{LOG\_NDELAY} & Apre la connessione al sistema del \textit{syslog}
+ subito invece di attendere l'invio del primo
+ messaggio.\\
+ \constd{LOG\_NOWAIT} & Non usato su Linux, su altre piattaforme non attende i
+ processi figli creati per inviare il messaggio.\\
+ \constd{LOG\_ODELAY} & Attende il primo messaggio per aprire la connessione al
+ sistema del \textit{syslog}.\\
+ \constd{LOG\_PERROR} & Stampa anche su \file{stderr} (non previsto in
+ POSIX.1-2001).\\
+ \constd{LOG\_PID} & Inserisce nei messaggi il \ids{PID} del processo
+ chiamante.\\
\hline
\end{tabular}
\caption{Valori possibili per l'argomento \param{option} di \func{openlog}.}
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{LOG\_EMERG} & Il sistema è inutilizzabile.\\
- \const{LOG\_ALERT} & C'è una emergenza che richiede intervento
- immediato.\\
- \const{LOG\_CRIT} & Si è in una condizione critica.\\
- \const{LOG\_ERR} & Si è in una condizione di errore.\\
- \const{LOG\_WARNING} & Messaggio di avvertimento.\\
- \const{LOG\_NOTICE} & Notizia significativa relativa al comportamento.\\
- \const{LOG\_INFO} & Messaggio informativo.\\
- \const{LOG\_DEBUG} & Messaggio di debug.\\
+ \constd{LOG\_EMERG} & Il sistema è inutilizzabile.\\
+ \constd{LOG\_ALERT} & C'è una emergenza che richiede intervento
+ immediato.\\
+ \constd{LOG\_CRIT} & Si è in una condizione critica.\\
+ \constd{LOG\_ERR} & Si è in una condizione di errore.\\
+ \constd{LOG\_WARNING} & Messaggio di avvertimento.\\
+ \constd{LOG\_NOTICE} & Notizia significativa relativa al comportamento.\\
+ \constd{LOG\_INFO} & Messaggio informativo.\\
+ \constd{LOG\_DEBUG} & Messaggio di debug.\\
\hline
\end{tabular}
\caption{Valori possibili per l'indice di importanza del messaggio da
disabilitata per tutte quelle priorità che non rientrano nella maschera.
In genere il valore viene impostato usando la macro
-\macro{LOG\_MASK}\texttt{(p)} dove \code{p} è una delle costanti di
+\macrod{LOG\_MASK}\texttt{(p)} dove \code{p} è una delle costanti di
tab.~\ref{tab:sess_syslog_priority}. É inoltre disponibile anche la macro
-\macro{LOG\_UPTO}\texttt{(p)} che permette di specificare automaticamente
+\macrod{LOG\_UPTO}\texttt{(p)} che permette di specificare automaticamente
tutte le priorità fino a quella indicata da \code{p}.
Una volta che si sia certi che non si intende registrare più nessun messaggio
di blocco totale del sistema (nell'assunzione che la console sia collegata).
In particolare la stampa dei messaggi sulla console è controllata dal
-contenuto del file \sysctlfile{kernel/printk} (o con l'equivalente parametro
+contenuto del file \sysctlfiled{kernel/printk} (o con l'equivalente parametro
di \func{sysctl}) che prevede quattro valori numerici interi: il primo,
\textit{console\_loglevel}, indica la priorità corrente oltre la quale vengono
stampati i messaggi sulla console, il secondo,
statica che può essere sovrascritta da chiamate successive, e non è
rientrante. Indicando invece un puntatore ad una zona di memoria già allocata
la stringa sarà scritta su di essa, ma in questo caso il buffer preallocato
-deve avere una dimensione di almeno \const{L\_ctermid}
+deve avere una dimensione di almeno \constd{L\_ctermid}
caratteri.\footnote{\const{L\_ctermid} è una delle varie costanti del sistema,
non trattata esplicitamente in sez.~\ref{sec:sys_characteristics}, che
indica la dimensione che deve avere una stringa per poter contenere il nome
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una
- \textit{condizione di BREAK} è definita nel contesto di
- una trasmissione seriale asincrona come una sequenza di
- bit nulli più lunga di un byte.\\
- \const{BRKINT} & Controlla la reazione ad un BREAK quando
- \const{IGNBRK} non è impostato. Se \const{BRKINT} è
- impostato il BREAK causa lo scarico delle code,
- e se il terminale è il terminale di controllo per un
- gruppo in foreground anche l'invio di \signal{SIGINT} ai
- processi di quest'ultimo. Se invece \const{BRKINT} non è
- impostato un BREAK viene letto come un carattere
- NUL, a meno che non sia impostato \const{PARMRK}
- nel qual caso viene letto come la sequenza di caratteri
- \texttt{0xFF 0x00 0x00}.\\
- \const{IGNPAR} & Ignora gli errori di parità, il carattere viene passato
- come ricevuto. Ha senso solo se si è impostato
- \const{INPCK}.\\
- \const{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha
- senso solo se \const{INPCK} è impostato e \const{IGNPAR}
- no. Se impostato inserisce una sequenza \texttt{0xFF
- 0x00} prima di ogni carattere che presenta errori di
- parità, se non impostato un carattere con errori di
- parità viene letto come uno \texttt{0x00}. Se un
- carattere ha il valore \texttt{0xFF} e \const{ISTRIP}
- non è impostato, per evitare ambiguità esso viene sempre
- riportato come \texttt{0xFF 0xFF}.\\
- \const{INPCK} & Abilita il controllo di parità in ingresso. Se non viene
- impostato non viene fatto nessun controllo ed i caratteri
- vengono passati in input direttamente.\\
- \const{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette
- bit mettendo a zero il bit più significativo, altrimenti
- vengono passati tutti gli otto bit.\\
- \const{INLCR} & Se impostato in ingresso il carattere di a capo
- (\verb|'\n'|) viene automaticamente trasformato in un
- ritorno carrello (\verb|'\r'|).\\
- \const{IGNCR} & Se impostato il carattere di ritorno carrello
- (\textit{carriage return}, \verb|'\r'|) viene scartato
- dall'input. Può essere utile per i terminali che inviano
- entrambi i caratteri di ritorno carrello e a capo
- (\textit{newline}, \verb|'\n'|).\\
- \const{ICRNL} & Se impostato un carattere di ritorno carrello
- (\verb|'\r'|) sul terminale viene automaticamente
- trasformato in un a capo (\verb|'\n'|) sulla coda di
- input.\\
- \const{IUCLC} & Se impostato trasforma i caratteri maiuscoli dal
- terminale in minuscoli sull'ingresso (opzione non
- POSIX).\\
- \const{IXON} & Se impostato attiva il controllo di flusso in uscita con i
- caratteri di START e STOP. se si riceve
- uno STOP l'output viene bloccato, e viene fatto
- ripartire solo da uno START, e questi due
- caratteri non vengono passati alla coda di input. Se non
- impostato i due caratteri sono passati alla coda di input
- insieme agli altri.\\
- \const{IXANY} & Se impostato con il controllo di flusso permette a
- qualunque carattere di far ripartire l'output bloccato da
- un carattere di STOP.\\
- \const{IXOFF} & Se impostato abilita il controllo di flusso in
- ingresso. Il computer emette un carattere di STOP per
- bloccare l'input dal terminale e lo sblocca con il
- carattere START.\\
- \const{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa
- di ingresso; in Linux non è implementato e il kernel si
- comporta cose se fosse sempre impostato (è una estensione
- BSD).\\
- \const{IUTF8} & Indica che l'input è in UTF-8, cosa che consente di
- utilizzare la cancellazione dei caratteri in maniera
- corretta (dal kernel 2.6.4 e non previsto in POSIX).\\
+ \constd{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una
+ \textit{condizione di BREAK} è definita nel contesto di
+ una trasmissione seriale asincrona come una sequenza di
+ bit nulli più lunga di un byte.\\
+ \constd{BRKINT} & Controlla la reazione ad un BREAK quando
+ \const{IGNBRK} non è impostato. Se \const{BRKINT} è
+ impostato il BREAK causa lo scarico delle code,
+ e se il terminale è il terminale di controllo per un
+ gruppo in foreground anche l'invio di \signal{SIGINT} ai
+ processi di quest'ultimo. Se invece \const{BRKINT} non è
+ impostato un BREAK viene letto come un carattere
+ NUL, a meno che non sia impostato \const{PARMRK}
+ nel qual caso viene letto come la sequenza di caratteri
+ \texttt{0xFF 0x00 0x00}.\\
+ \constd{IGNPAR} & Ignora gli errori di parità, il carattere viene passato
+ come ricevuto. Ha senso solo se si è impostato
+ \const{INPCK}.\\
+ \constd{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha
+ senso solo se \const{INPCK} è impostato e \const{IGNPAR}
+ no. Se impostato inserisce una sequenza \texttt{0xFF
+ 0x00} prima di ogni carattere che presenta errori di
+ parità, se non impostato un carattere con errori di
+ parità viene letto come uno \texttt{0x00}. Se un
+ carattere ha il valore \texttt{0xFF} e \const{ISTRIP}
+ non è impostato, per evitare ambiguità esso viene sempre
+ riportato come \texttt{0xFF 0xFF}.\\
+ \constd{INPCK} & Abilita il controllo di parità in ingresso. Se non viene
+ impostato non viene fatto nessun controllo ed i caratteri
+ vengono passati in input direttamente.\\
+ \constd{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette
+ bit mettendo a zero il bit più significativo, altrimenti
+ vengono passati tutti gli otto bit.\\
+ \constd{INLCR} & Se impostato in ingresso il carattere di a capo
+ (\verb|'\n'|) viene automaticamente trasformato in un
+ ritorno carrello (\verb|'\r'|).\\
+ \constd{IGNCR} & Se impostato il carattere di ritorno carrello
+ (\textit{carriage return}, \verb|'\r'|) viene scartato
+ dall'input. Può essere utile per i terminali che inviano
+ entrambi i caratteri di ritorno carrello e a capo
+ (\textit{newline}, \verb|'\n'|).\\
+ \constd{ICRNL} & Se impostato un carattere di ritorno carrello
+ (\verb|'\r'|) sul terminale viene automaticamente
+ trasformato in un a capo (\verb|'\n'|) sulla coda di
+ input.\\
+ \constd{IUCLC} & Se impostato trasforma i caratteri maiuscoli dal
+ terminale in minuscoli sull'ingresso (opzione non
+ POSIX).\\
+ \constd{IXON} & Se impostato attiva il controllo di flusso in uscita con i
+ caratteri di START e STOP. se si riceve
+ uno STOP l'output viene bloccato, e viene fatto
+ ripartire solo da uno START, e questi due
+ caratteri non vengono passati alla coda di input. Se non
+ impostato i due caratteri sono passati alla coda di input
+ insieme agli altri.\\
+ \constd{IXANY} & Se impostato con il controllo di flusso permette a
+ qualunque carattere di far ripartire l'output bloccato da
+ un carattere di STOP.\\
+ \constd{IXOFF} & Se impostato abilita il controllo di flusso in
+ ingresso. Il computer emette un carattere di STOP per
+ bloccare l'input dal terminale e lo sblocca con il
+ carattere START.\\
+ \constd{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa
+ di ingresso; in Linux non è implementato e il kernel si
+ comporta cose se fosse sempre impostato (è una estensione
+ BSD).\\
+ \constd{IUTF8} & Indica che l'input è in UTF-8, cosa che consente di
+ utilizzare la cancellazione dei caratteri in maniera
+ corretta (dal kernel 2.6.4 e non previsto in POSIX).\\
\hline
\end{tabular}
\caption{Costanti identificative dei vari bit del flag di controllo
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{OPOST} & Se impostato i caratteri vengono convertiti opportunamente
+ \constd{OPOST} & Se impostato i caratteri vengono convertiti opportunamente
(in maniera dipendente dall'implementazione) per la
visualizzazione sul terminale, ad esempio al
carattere di a capo (NL) può venire aggiunto un ritorno
carrello (CR).\\
- \const{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso
+ \constd{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso
in caratteri maiuscoli sull'uscita (non previsto da
POSIX).\\
- \const{ONLCR} & Se impostato converte automaticamente il carattere di a
+ \constd{ONLCR} & Se impostato converte automaticamente il carattere di a
capo (NL) in un carattere di ritorno carrello (CR).\\
- \const{OCRNL} & Se impostato converte automaticamente il carattere di a
+ \constd{OCRNL} & Se impostato converte automaticamente il carattere di a
capo (NL) nella coppia di caratteri ritorno carrello, a
capo (CR-NL).\\
- \const{ONOCR} & Se impostato converte il carattere di ritorno carrello
+ \constd{ONOCR} & Se impostato converte il carattere di ritorno carrello
(CR) nella coppia di caratteri CR-NL.\\
- \const{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno
+ \constd{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno
carrello (CR).\\
- \const{OFILL} & Se impostato in caso di ritardo sulla linea invia dei
+ \constd{OFILL} & Se impostato in caso di ritardo sulla linea invia dei
caratteri di riempimento invece di attendere.\\
- \const{OFDEL} & Se impostato il carattere di riempimento è DEL
+ \constd{OFDEL} & Se impostato il carattere di riempimento è DEL
(\texttt{0x3F}), invece che NUL (\texttt{0x00}), (non
previsto da POSIX e non implementato su Linux).\\
- \const{NLDLY} & Maschera per i bit che indicano il ritardo per il
+ \constd{NLDLY} & Maschera per i bit che indicano il ritardo per il
carattere di a capo (NL), i valori possibili sono
\val{NL0} o \val{NL1}.\\
- \const{CRDLY} & Maschera per i bit che indicano il ritardo per il
+ \constd{CRDLY} & Maschera per i bit che indicano il ritardo per il
carattere ritorno carrello (CR), i valori possibili sono
\val{CR0}, \val{CR1}, \val{CR2} o \val{CR3}.\\
- \const{TABDLY}& Maschera per i bit che indicano il ritardo per il
+ \constd{TABDLY}& Maschera per i bit che indicano il ritardo per il
carattere di tabulazione, i valori possibili sono
\val{TAB0}, \val{TAB1}, \val{TAB2} o \val{TAB3}.\\
- \const{BSDLY} & Maschera per i bit che indicano il ritardo per il
+ \constd{BSDLY} & Maschera per i bit che indicano il ritardo per il
carattere di ritorno indietro (\textit{backspace}), i
valori possibili sono \val{BS0} o \val{BS1}.\\
- \const{VTDLY} & Maschera per i bit che indicano il ritardo per il
+ \constd{VTDLY} & Maschera per i bit che indicano il ritardo per il
carattere di tabulazione verticale, i valori possibili sono
\val{VT0} o \val{VT1}.\\
- \const{FFDLY} & Maschera per i bit che indicano il ritardo per il
+ \constd{FFDLY} & Maschera per i bit che indicano il ritardo per il
carattere di pagina nuova (\textit{form feed}), i valori
possibili sono \val{FF0} o \val{FF1}.\\
\hline
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{CBAUD} & Maschera dei bit (4+1) usati per impostare della velocità
- della linea (il \textit{baud rate}) in ingresso; non è
- presente in POSIX ed in Linux non è implementato in
- quanto viene usato un apposito campo di
- \struct{termios}.\\
- \const{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della
- linea, non è presente in POSIX e per le stesse
- motivazioni del precedente non è implementato in Linux.\\
- \const{CSIZE} & Maschera per i bit usati per specificare la dimensione
- del carattere inviato lungo la linea di trasmissione, i
- valore ne indica la lunghezza (in bit), ed i valori
- possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8}
- corrispondenti ad un analogo numero di bit.\\
- \const{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea
- seriale, se non impostato ne viene usato soltanto uno.\\
- \const{CREAD} & Se è impostato si può leggere l'input del terminale,
- altrimenti i caratteri in ingresso vengono scartati
- quando arrivano.\\
- \const{PARENB} & Se impostato abilita la generazione il controllo di
- parità. La reazione in caso di errori dipende dai
- relativi valori per \var{c\_iflag}, riportati in
- tab.~\ref{tab:sess_termios_iflag}. Se non è impostato i
- bit di parità non vengono generati e i caratteri non
- vengono controllati.\\
- \const{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se
- impostato viene usata una parità è dispari, altrimenti
- viene usata una parità pari.\\
- \const{HUPCL} & Se è impostato viene distaccata la connessione del
- modem quando l'ultimo dei processi che ha ancora un file
- aperto sul terminale lo chiude o esce.\\
- \const{LOBLK} & Se impostato blocca l'output su un strato di shell non
- corrente, non è presente in POSIX e non è implementato
- da Linux.\\
- \const{CLOCAL} & Se impostato indica che il terminale è connesso in locale
- e che le linee di controllo del modem devono essere
- ignorate. Se non impostato effettuando una chiamata ad
- \func{open} senza aver specificato il flag di
- \const{O\_NONBLOCK} si bloccherà il processo finché
- non si è stabilita una connessione con il modem; inoltre
- se viene rilevata una disconnessione viene inviato un
- segnale di \signal{SIGHUP} al processo di controllo del
- terminale. La lettura su un terminale sconnesso comporta
- una condizione di \textit{end of file} e la scrittura un
- errore di \errcode{EIO}.\\
- \const{CIBAUD} & Maschera dei bit della velocità della linea in
- ingresso; analogo a \const{CBAUD}, non è previsto da
- POSIX e non è implementato in Linux dato che è
- mantenuto in un apposito campo di \struct{termios}.\\
- \const{CMSPAR} & imposta un bit di parità costante: se \const{PARODD} è
- impostato la parità è sempre 1 (\textit{MARK}) se non è
- impostato la parità è sempre 0 (\textit{SPACE}), non è
- previsto da POSIX.\\
+ \constd{CBAUD} & Maschera dei bit (4+1) usati per impostare della velocità
+ della linea (il \textit{baud rate}) in ingresso; non è
+ presente in POSIX ed in Linux non è implementato in
+ quanto viene usato un apposito campo di
+ \struct{termios}.\\
+ \constd{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della
+ linea, non è presente in POSIX e per le stesse
+ motivazioni del precedente non è implementato in Linux.\\
+ \constd{CSIZE} & Maschera per i bit usati per specificare la dimensione
+ del carattere inviato lungo la linea di trasmissione, i
+ valore ne indica la lunghezza (in bit), ed i valori
+ possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8}
+ corrispondenti ad un analogo numero di bit.\\
+ \constd{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea
+ seriale, se non impostato ne viene usato soltanto uno.\\
+ \constd{CREAD} & Se è impostato si può leggere l'input del terminale,
+ altrimenti i caratteri in ingresso vengono scartati
+ quando arrivano.\\
+ \constd{PARENB} & Se impostato abilita la generazione il controllo di
+ parità. La reazione in caso di errori dipende dai
+ relativi valori per \var{c\_iflag}, riportati in
+ tab.~\ref{tab:sess_termios_iflag}. Se non è impostato i
+ bit di parità non vengono generati e i caratteri non
+ vengono controllati.\\
+ \constd{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se
+ impostato viene usata una parità è dispari, altrimenti
+ viene usata una parità pari.\\
+ \constd{HUPCL} & Se è impostato viene distaccata la connessione del
+ modem quando l'ultimo dei processi che ha ancora un file
+ aperto sul terminale lo chiude o esce.\\
+ \constd{LOBLK} & Se impostato blocca l'output su un strato di shell non
+ corrente, non è presente in POSIX e non è implementato
+ da Linux.\\
+ \constd{CLOCAL} & Se impostato indica che il terminale è connesso in locale
+ e che le linee di controllo del modem devono essere
+ ignorate. Se non impostato effettuando una chiamata ad
+ \func{open} senza aver specificato il flag di
+ \const{O\_NONBLOCK} si bloccherà il processo finché
+ non si è stabilita una connessione con il modem; inoltre
+ se viene rilevata una disconnessione viene inviato un
+ segnale di \signal{SIGHUP} al processo di controllo del
+ terminale. La lettura su un terminale sconnesso comporta
+ una condizione di \textit{end of file} e la scrittura un
+ errore di \errcode{EIO}.\\
+ \constd{CIBAUD} & Maschera dei bit della velocità della linea in
+ ingresso; analogo a \const{CBAUD}, non è previsto da
+ POSIX e non è implementato in Linux dato che è
+ mantenuto in un apposito campo di \struct{termios}.\\
+ \constd{CMSPAR} & imposta un bit di parità costante: se \const{PARODD} è
+ impostato la parità è sempre 1 (\textit{MARK}) se non è
+ impostato la parità è sempre 0 (\textit{SPACE}), non è
+ previsto da POSIX.\\
% vedi: http://www.lothosoft.ch/thomas/libmip/markspaceparity.php
- \const{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
- attraverso l'utilizzo delle dei due fili di RTS e CTS.\\
+ \constd{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
+ attraverso l'utilizzo delle dei due fili di RTS e CTS.\\
\hline
\end{tabular}
\caption{Costanti identificative dei vari bit del flag di controllo
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{ISIG} & Se impostato abilita il riconoscimento dei caratteri
- INTR, QUIT, e SUSP generando il relativo segnale.\\
- \const{ICANON} & Se impostato il terminale opera in modalità canonica,
- altrimenti opera in modalità non canonica.\\
- \const{XCASE} & Se impostato il terminale funziona solo con le
- maiuscole. L'input è convertito in minuscole tranne per i
- caratteri preceduti da una ``\texttt{\bslash}''. In output
- le maiuscole sono precedute da una ``\texttt{\bslash}'' e
- le minuscole convertite in maiuscole. Non è presente in
- POSIX.\\
- \const{ECHO} & Se è impostato viene attivato l'eco dei caratteri in
- input sull'output del terminale.\\
- \const{ECHOE} & Se è impostato l'eco mostra la cancellazione di un
- carattere in input (in reazione al carattere ERASE)
- cancellando l'ultimo carattere della riga corrente dallo
- schermo; altrimenti il carattere è rimandato in eco per
- mostrare quanto accaduto (usato per i terminali con
- l'uscita su una stampante).\\
- \const{ECHOK} & Se impostato abilita il trattamento della visualizzazione
- del carattere KILL, andando a capo dopo aver visualizzato
- lo stesso, altrimenti viene solo mostrato il carattere e
- sta all'utente ricordare che l'input precedente è stato
- cancellato.\\
- \const{ECHONL} & Se impostato viene effettuato l'eco di un a
- capo (\verb|\n|) anche se non è stato impostato
- \const{ECHO}.\\
- \const{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di
- controllo ASCII (tranne TAB, NL, START, e STOP) sono
- mostrati nella forma che prepone un ``\texttt{\circonf}''
- alla lettera ottenuta sommando \texttt{0x40} al valore del
- carattere (di solito questi si possono ottenere anche
- direttamente premendo il tasto \texttt{ctrl} più la
- relativa lettera). Non è presente in POSIX.\\
- \const{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di
- cancellazione in una modalità adatta ai terminali con
- l'uscita su stampante; l'invio del carattere di ERASE
- comporta la stampa di un ``\texttt{|}'' seguito dal
- carattere cancellato, e così via in caso di successive
- cancellazioni, quando si riprende ad immettere carattere
- normali prima verrà stampata una ``\texttt{/}''. Non è
- presente in POSIX.\\
- \const{ECHOKE} & Se impostato abilita il trattamento della visualizzazione
- del carattere KILL cancellando i caratteri precedenti
- nella linea secondo le modalità specificate dai valori di
- \const{ECHOE} e \const{ECHOPRT}. Non è presente in
- POSIX.\\
- \const{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in
- lettura. Non è presente in POSIX e non è supportato da
- Linux.\\
- \const{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
- attivato dal carattere DISCARD. Non è presente in POSIX e
- non è supportato da Linux.\\
- \const{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
- e uscita quando vengono emessi i segnali \signal{SIGINT},
- \signal{SIGQUIT} e \signal{SIGSUSP}.\\
- \const{TOSTOP} & Se abilitato, con il supporto per il job control presente,
- genera il segnale \signal{SIGTTOU} per un processo in
- background che cerca di scrivere sul terminale.\\
- \const{PENDIN} & Indica che la linea deve essere ristampata, viene
- attivato dal carattere REPRINT e resta attivo fino alla
- fine della ristampa. Non è presente in POSIX e
- non è supportato in Linux.\\
- \const{IEXTEN} & Abilita alcune estensioni previste dalla
- implementazione. Deve essere impostato perché caratteri
- speciali come EOL2, LNEXT, REPRINT e WERASE possano
- essere interpretati.\\
+ \constd{ISIG} & Se impostato abilita il riconoscimento dei caratteri
+ INTR, QUIT, e SUSP generando il relativo segnale.\\
+ \constd{ICANON} & Se impostato il terminale opera in modalità canonica,
+ altrimenti opera in modalità non canonica.\\
+ \constd{XCASE} & Se impostato il terminale funziona solo con le
+ maiuscole. L'input è convertito in minuscole tranne per i
+ caratteri preceduti da una ``\texttt{\bslash}''. In output
+ le maiuscole sono precedute da una ``\texttt{\bslash}'' e
+ le minuscole convertite in maiuscole. Non è presente in
+ POSIX.\\
+ \constd{ECHO} & Se è impostato viene attivato l'eco dei caratteri in
+ input sull'output del terminale.\\
+ \constd{ECHOE} & Se è impostato l'eco mostra la cancellazione di un
+ carattere in input (in reazione al carattere ERASE)
+ cancellando l'ultimo carattere della riga corrente dallo
+ schermo; altrimenti il carattere è rimandato in eco per
+ mostrare quanto accaduto (usato per i terminali con
+ l'uscita su una stampante).\\
+ \constd{ECHOK} & Se impostato abilita il trattamento della visualizzazione
+ del carattere KILL, andando a capo dopo aver visualizzato
+ lo stesso, altrimenti viene solo mostrato il carattere e
+ sta all'utente ricordare che l'input precedente è stato
+ cancellato.\\
+ \constd{ECHONL} & Se impostato viene effettuato l'eco di un a
+ capo (\verb|\n|) anche se non è stato impostato
+ \const{ECHO}.\\
+ \constd{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di
+ controllo ASCII (tranne TAB, NL, START, e STOP) sono
+ mostrati nella forma che prepone un ``\texttt{\circonf}''
+ alla lettera ottenuta sommando \texttt{0x40} al valore del
+ carattere (di solito questi si possono ottenere anche
+ direttamente premendo il tasto \texttt{ctrl} più la
+ relativa lettera). Non è presente in POSIX.\\
+ \constd{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di
+ cancellazione in una modalità adatta ai terminali con
+ l'uscita su stampante; l'invio del carattere di ERASE
+ comporta la stampa di un ``\texttt{|}'' seguito dal
+ carattere cancellato, e così via in caso di successive
+ cancellazioni, quando si riprende ad immettere carattere
+ normali prima verrà stampata una ``\texttt{/}''. Non è
+ presente in POSIX.\\
+ \constd{ECHOKE} & Se impostato abilita il trattamento della visualizzazione
+ del carattere KILL cancellando i caratteri precedenti
+ nella linea secondo le modalità specificate dai valori di
+ \const{ECHOE} e \const{ECHOPRT}. Non è presente in
+ POSIX.\\
+ \constd{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in
+ lettura. Non è presente in POSIX e non è supportato da
+ Linux.\\
+ \constd{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
+ attivato dal carattere DISCARD. Non è presente in POSIX e
+ non è supportato da Linux.\\
+ \constd{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
+ e uscita quando vengono emessi i segnali \signal{SIGINT},
+ \signal{SIGQUIT} e \signal{SIGSUSP}.\\
+ \constd{TOSTOP} & Se abilitato, con il supporto per il job control presente,
+ genera il segnale \signal{SIGTTOU} per un processo in
+ background che cerca di scrivere sul terminale.\\
+ \constd{PENDIN} & Indica che la linea deve essere ristampata, viene
+ attivato dal carattere REPRINT e resta attivo fino alla
+ fine della ristampa. Non è presente in POSIX e
+ non è supportato in Linux.\\
+ \constd{IEXTEN} & Abilita alcune estensioni previste dalla
+ implementazione. Deve essere impostato perché caratteri
+ speciali come EOL2, LNEXT, REPRINT e WERASE possano
+ essere interpretati.\\
\hline
\end{tabular}
\caption{Costanti identificative dei vari bit del flag di controllo
Oltre ai vari flag per gestire le varie caratteristiche dei terminali,
\struct{termios} contiene pure il campo \var{c\_cc} che viene usato per
impostare i caratteri speciali associati alle varie funzioni di controllo. Il
-numero di questi caratteri speciali è indicato dalla costante \const{NCCS},
+numero di questi caratteri speciali è indicato dalla costante \constd{NCCS},
POSIX ne specifica almeno 11, ma molte implementazioni ne definiscono molti
altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri
effettivamente definiti sono solo 17.}
\textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\
\hline
\hline
- \const{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt,
- provoca l'emissione di
- \signal{SIGINT}.\\
- \const{VQUIT} &\texttt{0x1C}&(\texttt{C-\bslash})& Carattere di uscita,
- provoca l'emissione di
- \signal{SIGQUIT}.\\
- \const{VERASE}&\texttt{0x7f}&DEL,\texttt{C-?}& Carattere di ERASE, cancella
- l'ultimo carattere
- precedente nella linea.\\
- \const{VKILL} &\texttt{0x15}&(\texttt{C-u})& Carattere di KILL, cancella
- l'intera riga.\\
- \const{VEOF} &\texttt{0x04}&(\texttt{C-d})& Carattere di
- \textit{end-of-file}. Causa
- l'invio del contenuto del
- buffer di ingresso al
- processo in lettura anche se
- non è ancora stato ricevuto
- un a capo. Se è il primo
- carattere immesso comporta il
- ritorno di \func{read} con
- zero caratteri, cioè la
- condizione di
- \textit{end-of-file}.\\
- \const{VMIN} & --- & --- & Numero minimo di caratteri per una
- lettura in modo non canonico.\\
- \const{VEOL} &\texttt{0x00}& NUL & Carattere di fine riga. Agisce come
- un a capo, ma non viene scartato ed
- è letto come l'ultimo carattere
- nella riga.\\
- \const{VTIME} & --- & --- & Timeout, in decimi di secondo, per
- una lettura in modo non canonico.\\
- \const{VEOL2} &\texttt{0x00}& NUL & Ulteriore carattere di fine
- riga. Ha lo stesso effetto di
- \const{VEOL} ma può essere un
- carattere diverso. \\
- \const{VSWTC} &\texttt{0x00}& NUL & Carattere di switch. Non supportato
- in Linux.\\
- \const{VSTART}&\texttt{0x17}&(\texttt{C-q})& Carattere di START. Riavvia un
+ \constd{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt,
+ provoca l'emissione di
+ \signal{SIGINT}.\\
+ \constd{VQUIT} &\texttt{0x1C}&(\texttt{C-\bslash})& Carattere di uscita,
+ provoca l'emissione di
+ \signal{SIGQUIT}.\\
+ \constd{VERASE}&\texttt{0x7f}&DEL,\texttt{C-?}& Carattere di ERASE, cancella
+ l'ultimo carattere
+ precedente nella linea.\\
+ \constd{VKILL} &\texttt{0x15}&(\texttt{C-u})& Carattere di KILL, cancella
+ l'intera riga.\\
+ \constd{VEOF} &\texttt{0x04}&(\texttt{C-d})& Carattere di
+ \textit{end-of-file}. Causa
+ l'invio del contenuto del
+ buffer di ingresso al
+ processo in lettura anche se
+ non è ancora stato ricevuto
+ un a capo. Se è il primo
+ carattere immesso comporta il
+ ritorno di \func{read} con
+ zero caratteri, cioè la
+ condizione di
+ \textit{end-of-file}.\\
+ \constd{VMIN} & --- & --- & Numero minimo di caratteri per una
+ lettura in modo non canonico.\\
+ \constd{VEOL} &\texttt{0x00}& NUL & Carattere di fine riga. Agisce come
+ un a capo, ma non viene scartato ed
+ è letto come l'ultimo carattere
+ nella riga.\\
+ \constd{VTIME} & --- & --- & Timeout, in decimi di secondo, per
+ una lettura in modo non canonico.\\
+ \constd{VEOL2} &\texttt{0x00}& NUL & Ulteriore carattere di fine
+ riga. Ha lo stesso effetto di
+ \const{VEOL} ma può essere un
+ carattere diverso. \\
+ \constd{VSWTC} &\texttt{0x00}& NUL & Carattere di switch. Non supportato
+ in Linux.\\
+ \constd{VSTART}&\texttt{0x17}&(\texttt{C-q})& Carattere di START. Riavvia un
output bloccato da uno STOP.\\
- \const{VSTOP} &\texttt{0x19}&(\texttt{C-s})& Carattere di STOP. Blocca
+ \constd{VSTOP} &\texttt{0x19}&(\texttt{C-s})& Carattere di STOP. Blocca
l'output fintanto che non
viene premuto un carattere di
START.\\
- \const{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di
+ \constd{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di
sospensione. Invia il segnale
\signal{SIGTSTP}.\\
- \const{VDSUSP}&\texttt{0x19}&(\texttt{C-y})& Carattere di sospensione
+ \constd{VDSUSP}&\texttt{0x19}&(\texttt{C-y})& Carattere di sospensione
ritardata. Invia il segnale
\signal{SIGTSTP} quando il
carattere viene letto dal
programma, (non presente in
POSIX e non riconosciuto in
Linux).\\
- \const{VLNEXT}&\texttt{0x16}&(\texttt{C-v})& Carattere di escape, serve a
+ \constd{VLNEXT}&\texttt{0x16}&(\texttt{C-v})& Carattere di escape, serve a
quotare il carattere
successivo che non viene
interpretato ma passato
direttamente all'output.\\
- \const{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una
+ \constd{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una
parola.\\
- \const{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non
+ \constd{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non
ancora letti (non presente in
POSIX).\\
- \const{VDISCARD}&\texttt{0x0F}&(\texttt{C-o})& Non riconosciuto in Linux.\\
- \const{VSTATUS} &\texttt{0x13}&(\texttt{C-t})& Non riconosciuto in Linux.\\
+ \constd{VDISCARD}&\texttt{0x0F}&(\texttt{C-o})& Non riconosciuto in Linux.\\
+ \constd{VSTATUS} &\texttt{0x13}&(\texttt{C-t})& Non riconosciuto in Linux.\\
\hline
\end{tabular}
\caption{Valori dei caratteri di controllo mantenuti nel campo \var{c\_cc}
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{TCSANOW} & Esegue i cambiamenti in maniera immediata.\\
- \const{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che
- tutto l'output presente sulle code è stato scritto.\\
- \const{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta
- tutti i dati presenti sulla coda di input.\\
+ \constd{TCSANOW} & Esegue i cambiamenti in maniera immediata.\\
+ \constd{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che
+ tutto l'output presente sulle code è stato scritto.\\
+ \constd{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta
+ tutti i dati presenti sulla coda di input.\\
\hline
\end{tabular}
\caption{Possibili valori per l'argomento \param{optional\_actions} della
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{TCIFLUSH} & Cancella i dati sulla coda di ingresso.\\
- \const{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\
- \const{TCIOFLUSH}& Cancella i dati su entrambe le code.\\
+ \constd{TCIFLUSH} & Cancella i dati sulla coda di ingresso.\\
+ \constd{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\
+ \constd{TCIOFLUSH}& Cancella i dati su entrambe le code.\\
\hline
\end{tabular}
\caption{Possibili valori per l'argomento \param{queue} della
\textbf{Valore}& \textbf{Azione}\\
\hline
\hline
- \const{TCOOFF}& Sospende l'output.\\
- \const{TCOON} & Riprende un output precedentemente sospeso.\\
- \const{TCIOFF}& Il sistema trasmette un carattere di STOP, che
- fa interrompere la trasmissione dei dati dal terminale.\\
- \const{TCION} & Il sistema trasmette un carattere di START, che
- fa riprendere la trasmissione dei dati dal terminale.\\
+ \constd{TCOOFF}& Sospende l'output.\\
+ \constd{TCOON} & Riprende un output precedentemente sospeso.\\
+ \constd{TCIOFF}& Il sistema trasmette un carattere di STOP, che
+ fa interrompere la trasmissione dei dati dal terminale.\\
+ \constd{TCION} & Il sistema trasmette un carattere di START, che
+ fa riprendere la trasmissione dei dati dal terminale.\\
\hline
\end{tabular}
\caption{Possibili valori per l'argomento \param{action} della
\end{table}
-Si inoltre noti come \const{SIGCONT} sia l'unico segnale a non avere
+Si inoltre noti come \signal{SIGCONT} sia l'unico segnale a non avere
l'indicazione di una azione predefinita nella terza colonna di
tab.~\ref{tab:sig_signal_list}, questo perché il suo effetto è sempre quello
di far ripartire un programma in stato \texttt{T} fermato da un segnale di
-stop. Inoltre i segnali \const{SIGSTOP} e \const{SIGKILL} si distinguono da
+stop. Inoltre i segnali \signal{SIGSTOP} e \signal{SIGKILL} si distinguono da
tutti gli altri per la specifica caratteristica di non potere essere né
intercettati, né bloccati, né ignorati.
-Il numero totale di segnali presenti è dato dalla macro \const{NSIG} (e tiene
+Il numero totale di segnali presenti è dato dalla macro \macrod{NSIG} (e tiene
conto anche di quelli \textit{real-time}) e dato che i numeri dei segnali sono
allocati progressivamente, essa corrisponde anche al successivo del valore
numerico assegnato all'ultimo segnale definito. La descrizione dettagliata
avuto successo.
\item[\signald{SIGURG}] Questo segnale è inviato quando arrivano dei dati
- urgenti o \itindex{out-of-band} \textit{out-of-band} su di un
- socket; per maggiori dettagli al proposito si veda
- sez.~\ref{sec:TCP_urgent_data}.
+ urgenti o \textit{out-of-band} su di un socket; per maggiori dettagli al
+ proposito si veda sez.~\ref{sec:TCP_urgent_data}.
\item[\signald{SIGPOLL}] Questo segnale è definito nella standard POSIX.1-2001,
ed è equivalente a \signal{SIGIO} che invece deriva da BSD. Su Linux è
Quando si mette in esecuzione un nuovo programma con \func{exec} (si ricordi
quanto detto in sez.~\ref{sec:proc_exec}) tutti i segnali per i quali è stato
-installato un gestore vengono reimpostati a \const{SIG\_DFL}. Non ha più
+installato un gestore vengono reimpostati a \constd{SIG\_DFL}. Non ha più
senso infatti fare riferimento a funzioni definite nel programma originario,
che non sono presenti nello spazio di indirizzi del nuovo programma.
Si noti che questo vale solo per le azioni per le quali è stato installato un
gestore, viene mantenuto invece ogni eventuale impostazione dell'azione a
-\const{SIG\_IGN}. Questo permette ad esempio alla shell di impostare ad
+\constd{SIG\_IGN}. Questo permette ad esempio alla shell di impostare ad
\const{SIG\_IGN} le risposte per \signal{SIGINT} e \signal{SIGQUIT} per i
programmi eseguiti in background, che altrimenti sarebbero interrotti da una
successiva pressione di \texttt{C-c} o \texttt{C-y}.
Per quanto riguarda il comportamento di tutte le altre \textit{system call} si
-danno sostanzialmente due casi, a seconda che esse siano
-\index{system~call~lente} \textsl{lente} (\textit{slow}) o \textsl{veloci}
-(\textit{fast}). La gran parte di esse appartiene a quest'ultima categoria,
-che non è influenzata dall'arrivo di un segnale. Esse sono dette
-\textsl{veloci} in quanto la loro esecuzione è sostanzialmente immediata. La
-risposta al segnale viene sempre data dopo che la \textit{system call} è stata
-completata, in quanto attendere per eseguire un gestore non comporta nessun
-inconveniente.
+danno sostanzialmente due casi, a seconda che esse siano \textsl{lente}
+(\textit{slow}) o \textsl{veloci} (\textit{fast}). La gran parte di esse
+appartiene a quest'ultima categoria, che non è influenzata dall'arrivo di un
+segnale. Esse sono dette \textsl{veloci} in quanto la loro esecuzione è
+sostanzialmente immediata. La risposta al segnale viene sempre data dopo che
+la \textit{system call} è stata completata, in quanto attendere per eseguire
+un gestore non comporta nessun inconveniente.
+
+\index{system~call~lente|(}
In alcuni casi però alcune \textit{system call} possono bloccarsi
-indefinitamente e per questo motivo vengono chiamate \textsl{lente}
-\index{system~call~lente} o \textsl{bloccanti}. In questo caso non si può
-attendere la conclusione della \textit{system call}, perché questo renderebbe
-impossibile una risposta pronta al segnale, per cui il gestore viene eseguito
-prima che la \textit{system call} sia ritornata. Un elenco dei casi in cui si
-presenta questa situazione è il seguente:
+indefinitamente e per questo motivo vengono chiamate \textsl{lente} o
+\textsl{bloccanti}. In questo caso non si può attendere la conclusione della
+\textit{system call}, perché questo renderebbe impossibile una risposta pronta
+al segnale, per cui il gestore viene eseguito prima che la \textit{system
+ call} sia ritornata. Un elenco dei casi in cui si presenta questa
+situazione è il seguente:
\begin{itemize*}
\item la lettura da file che possono bloccarsi in attesa di dati non ancora
presenti (come per certi file di dispositivo, i socket o le \textit{pipe});
\end{itemize*}
+\index{system~call~lente|)}
+
\subsection{L'installazione di un gestore}
\label{sec:sig_signal}
}
{La funzione ritorna il precedente gestore in caso di successo in caso di
- successo e \const{SIG\_ERR} per un errore, nel qual caso \var{errno}
+ successo e \constd{SIG\_ERR} per un errore, nel qual caso \var{errno}
assumerà il valore:
\begin{errlist}
\item[\errcode{EINVAL}] il numero di segnale \param{signum} non è valido.
\hline
\hline
$>0$ & Il segnale è mandato al processo con \ids{PID} uguale
- a \param{pid}.\\
- 0 & Il segnale è mandato ad ogni processo del \itindex{process~group}
- \textit{process group} del chiamante.\\
+ a \param{pid}.\\
+ 0 & Il segnale è mandato ad ogni processo del \textit{process group}
+ del chiamante.\\
$-1$ & Il segnale è mandato ad ogni processo (eccetto \cmd{init}).\\
$<-1$& Il segnale è mandato ad ogni processo del \textit{process group}
- \itindex{process~group} con \ids{PGID} uguale
- a $|\param{pid}|$.\\
+ con \ids{PGID} uguale a $|\param{pid}|$.\\
\hline
\end{tabular}
\caption{Valori dell'argomento \param{pid} per la funzione
\begin{funcproto}{
\fhead{signal.h}
\fdecl{int killpg(pid\_t pidgrp, int signal)}
-\fdesc{Invia un segnale ad un \itindex{process~group} \textit{process group}.}
+\fdesc{Invia un segnale ad un \textit{process group}.}
}
{ La funzione ritorna $0$ in caso di successo e $-1$ per un errore, e gli
\end{funcproto}
-La funzione invia il segnale \param{signal} al \itindex{process~group}
-\textit{process group} il cui \acr{PGID} (vedi sez.~\ref{sec:sess_proc_group})
-è indicato dall'argomento \param{pidgrp}, che deve essere un intero
-positivo. Il suo utilizzo è sostanzialmente equivalente all'esecuzione di
-\code{kill(-pidgrp, signal)}.
+La funzione invia il segnale \param{signal} al \textit{process group} il cui
+\acr{PGID} (vedi sez.~\ref{sec:sess_proc_group}) è indicato
+dall'argomento \param{pidgrp}, che deve essere un intero positivo. Il suo
+utilizzo è sostanzialmente equivalente all'esecuzione di \code{kill(-pidgrp,
+ signal)}.
Oltre alle precedenti funzioni di base, vedremo più avanti che esistono altre
funzioni per inviare segnali generici, come \func{sigqueue} per i segnali
\textbf{Valore} & \textbf{Timer} \\
\hline
\hline
- \const{ITIMER\_REAL} & \textit{real-time timer}\\
- \const{ITIMER\_VIRTUAL} & \textit{virtual timer}\\
- \const{ITIMER\_PROF} & \textit{profiling timer}\\
+ \constd{ITIMER\_REAL} & \textit{real-time timer}\\
+ \constd{ITIMER\_VIRTUAL} & \textit{virtual timer}\\
+ \constd{ITIMER\_PROF} & \textit{profiling timer}\\
\hline
\end{tabular}
\caption{Valori dell'argomento \param{which} per la funzione
L'uso del contatore dei \textit{jiffies}, un intero a 32 bit nella maggior
parte dei casi, comportava inoltre l'impossibilità di specificare tempi molto
-lunghi. superiori al valore della costante \const{MAX\_SEC\_IN\_JIFFIES},
+lunghi. superiori al valore della costante \constd{MAX\_SEC\_IN\_JIFFIES},
pari, nel caso di default di un valore di \const{HZ} di 250, a circa 99 giorni
e mezzo. Con il cambiamento della rappresentazione effettuato nel kernel
2.6.16 questo problema è scomparso e con l'introduzione dei timer ad alta
Una seconda causa di potenziali ritardi è che il segnale viene generato alla
scadenza del timer, ma poi deve essere consegnato al processo; se quest'ultimo
-è attivo (questo è sempre vero per \const{ITIMER\_VIRT}) la consegna è
+è attivo (questo è sempre vero per \const{ITIMER\_VIRTUAL}) la consegna è
immediata, altrimenti può esserci un ulteriore ritardo che può variare a
seconda del carico del sistema.
stato consegnato. In questo caso, per il comportamento dei segnali descritto
in sez.~\ref{sec:sig_sigchld}, un solo segnale sarà consegnato. Per questo
oggi l'uso di questa funzione è deprecato a favore degli
-\textit{high-resolution timer} e della cosiddetta \itindex{POSIX~Timer~API}
-\textit{POSIX Timer API}, che tratteremo in sez.~\ref{sec:sig_timer_adv}.
+\textit{high-resolution timer} e della cosiddetta \textit{POSIX Timer API},
+che tratteremo in sez.~\ref{sec:sig_timer_adv}.
Dato che sia \func{alarm} che \func{setitimer} non consentono di leggere il
valore corrente di un timer senza modificarlo, è possibile usare la funzione
\textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{SA\_NOCLDSTOP}& Se il segnale è \signal{SIGCHLD} allora non deve
- essere notificato quando il processo figlio viene
- fermato da uno dei segnali \signal{SIGSTOP},
- \signal{SIGTSTP}, \signal{SIGTTIN} o
- \signal{SIGTTOU}, questo flag ha significato solo
- quando si imposta un gestore per \signal{SIGCHLD}.\\
- \const{SA\_NOCLDWAIT}& Se il segnale è \signal{SIGCHLD} e si richiede di
- ignorare il segnale con \const{SIG\_IGN} allora i
- processi figli non diventano \textit{zombie} quando
- terminano; questa funzionalità è stata introdotta
- nel kernel 2.6 e va a modificare il comportamento
- di \func{waitpid} come illustrato in
- sez.~\ref{sec:proc_wait}, se si installa un gestore
- con questo flag attivo il segnale \signal{SIGCHLD}
- viene comunque generato.\\
- \const{SA\_NODEFER} & Evita che il segnale corrente sia bloccato durante
- l'esecuzione del gestore.\\
- \const{SA\_NOMASK} & Nome obsoleto e sinonimo non standard di
- \const{SA\_NODEFER}, non deve essere più
- utilizzato.\\
- \const{SA\_ONESHOT} & Nome obsoleto e sinonimo non standard di
- \const{SA\_RESETHAND}, non deve essere più
- utilizzato.\\
- \const{SA\_ONSTACK} & Stabilisce l'uso di uno \textit{stack} alternativo
- per l'esecuzione del gestore (vedi
- sez.~\ref{sec:sig_specific_features}).\\
- \const{SA\_RESETHAND}& Ristabilisce l'azione per il segnale al valore
- predefinito una volta che il gestore è stato
- lanciato, riproduce cioè il comportamento della
- semantica inaffidabile.\\
- \const{SA\_RESTART} & Riavvia automaticamente le \textit{slow system
- call} quando vengono interrotte dal suddetto
- segnale, riproduce cioè il comportamento standard
- di BSD.\index{system~call~lente}\\
- \const{SA\_SIGINFO} & Deve essere specificato quando si vuole usare un
- gestore in forma estesa usando
- \var{sa\_sigaction} al posto di
- \var{sa\_handler}.\\
+ \constd{SA\_NOCLDSTOP}& Se il segnale è \signal{SIGCHLD} allora non deve
+ essere notificato quando il processo figlio viene
+ fermato da uno dei segnali \signal{SIGSTOP},
+ \signal{SIGTSTP}, \signal{SIGTTIN} o
+ \signal{SIGTTOU}, questo flag ha significato solo
+ quando si imposta un gestore per \signal{SIGCHLD}.\\
+ \constd{SA\_NOCLDWAIT}& Se il segnale è \signal{SIGCHLD} e si richiede di
+ ignorare il segnale con \const{SIG\_IGN} allora i
+ processi figli non diventano \textit{zombie} quando
+ terminano; questa funzionalità è stata introdotta
+ nel kernel 2.6 e va a modificare il comportamento
+ di \func{waitpid} come illustrato in
+ sez.~\ref{sec:proc_wait}, se si installa un gestore
+ con questo flag attivo il segnale \signal{SIGCHLD}
+ viene comunque generato.\\
+ \constd{SA\_NODEFER} & Evita che il segnale corrente sia bloccato durante
+ l'esecuzione del gestore.\\
+ \constd{SA\_NOMASK} & Nome obsoleto e sinonimo non standard di
+ \const{SA\_NODEFER}, non deve essere più
+ utilizzato.\\
+ \constd{SA\_ONESHOT} & Nome obsoleto e sinonimo non standard di
+ \const{SA\_RESETHAND}, non deve essere più
+ utilizzato.\\
+ \constd{SA\_ONSTACK} & Stabilisce l'uso di uno \textit{stack} alternativo
+ per l'esecuzione del gestore (vedi
+ sez.~\ref{sec:sig_specific_features}).\\
+ \constd{SA\_RESETHAND}& Ristabilisce l'azione per il segnale al valore
+ predefinito una volta che il gestore è stato
+ lanciato, riproduce cioè il comportamento della
+ semantica inaffidabile.\\
+ \constd{SA\_RESTART} & Riavvia automaticamente le \textit{slow system
+ call} quando vengono interrotte dal suddetto
+ segnale, riproduce cioè il comportamento standard
+ di BSD.\\
+ \constd{SA\_SIGINFO} & Deve essere specificato quando si vuole usare un
+ gestore in forma estesa usando
+ \var{sa\_sigaction} al posto di
+ \var{sa\_handler}.\\
\hline
\end{tabular}
\caption{Valori del campo \var{sa\_flag} della struttura \struct{sigaction}.}
\textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{SI\_USER} & Generato da \func{kill} o \func{raise} o affini.\\
- \const{SI\_KERNEL} & Inviato direttamente dal kernel.\\
- \const{SI\_QUEUE} & Inviato con \func{sigqueue} (vedi
- sez.~\ref{sec:sig_real_time}).\\
- \const{SI\_TIMER} & Scadenza di un\itindex{POSIX~Timer~API} \textit{POSIX
- timer} (vedi sez.~\ref{sec:sig_timer_adv}).\\
- \const{SI\_MESGQ} & Inviato al cambiamento di stato di una coda di
- messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}),
- introdotto con il kernel 2.6.6.\\
- \const{SI\_ASYNCIO}& Una operazione di I/O asincrono (vedi
- sez.~\ref{sec:file_asyncronous_io}) è stata
- completata.\\
- \const{SI\_SIGIO} & Segnale di \signal{SIGIO} da una coda (vedi
- sez.~\ref{sec:file_asyncronous_operation}).\\
- \const{SI\_TKILL} & Inviato da \func{tkill} o \func{tgkill} (vedi
- sez.~\ref{cha:thread_xxx}), introdotto con il kernel
- 2.4.19.\\
+ \constd{SI\_USER} & Generato da \func{kill} o \func{raise} o affini.\\
+ \constd{SI\_KERNEL} & Inviato direttamente dal kernel.\\
+ \constd{SI\_QUEUE} & Inviato con \func{sigqueue} (vedi
+ sez.~\ref{sec:sig_real_time}).\\
+ \constd{SI\_TIMER} & Scadenza di un \textit{POSIX timer} (vedi
+ sez.~\ref{sec:sig_timer_adv}).\\
+ \constd{SI\_MESGQ} & Inviato al cambiamento di stato di una coda di
+ messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}),
+ introdotto con il kernel 2.6.6.\\
+ \constd{SI\_ASYNCIO}& Una operazione di I/O asincrono (vedi
+ sez.~\ref{sec:file_asyncronous_io}) è stata
+ completata.\\
+ \constd{SI\_SIGIO} & Segnale di \signal{SIGIO} da una coda (vedi
+ sez.~\ref{sec:file_asyncronous_operation}).\\
+ \constd{SI\_TKILL} & Inviato da \func{tkill} o \func{tgkill} (vedi
+ sez.~\ref{cha:thread_xxx}), introdotto con il kernel
+ 2.4.19.\\
\hline
\end{tabular}
\caption{Valori del campo \var{si\_code} della struttura \struct{sigaction}
\textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{ILL\_ILLOPC} & Codice di operazione illegale.\\
- \const{ILL\_ILLOPN} & Operando illegale.\\
- \const{ILL\_ILLADR} & Modo di indirizzamento illegale.\\
- \const{ILL\_ILLTRP} & Trappola di processore illegale.\\
- \const{ILL\_PRVOPC} & Codice di operazione privilegiato.\\
- \const{ILL\_PRVREG} & Registro privilegiato.\\
- \const{ILL\_COPROC} & Errore del coprocessore.\\
- \const{ILL\_BADSTK} & Errore nello stack interno.\\
+ \constd{ILL\_ILLOPC} & Codice di operazione illegale.\\
+ \constd{ILL\_ILLOPN} & Operando illegale.\\
+ \constd{ILL\_ILLADR} & Modo di indirizzamento illegale.\\
+ \constd{ILL\_ILLTRP} & Trappola di processore illegale.\\
+ \constd{ILL\_PRVOPC} & Codice di operazione privilegiato.\\
+ \constd{ILL\_PRVREG} & Registro privilegiato.\\
+ \constd{ILL\_COPROC} & Errore del coprocessore.\\
+ \constd{ILL\_BADSTK} & Errore nello stack interno.\\
\hline
- \const{FPE\_INTDIV} & Divisione per zero intera.\\
- \const{FPE\_INTOVF} & Overflow intero.\\
- \const{FPE\_FLTDIV} & Divisione per zero in virgola mobile.\\
- \const{FPE\_FLTOVF} & Overflow in virgola mobile.\\
- \const{FPE\_FLTUND} & Underflow in virgola mobile.\\
- \const{FPE\_FLTRES} & Risultato in virgola mobile non esatto.\\
- \const{FPE\_FLTINV} & Operazione in virgola mobile non valida.\\
- \const{FPE\_FLTSUB} & Mantissa? fuori intervallo.\\
+ \constd{FPE\_INTDIV} & Divisione per zero intera.\\
+ \constd{FPE\_INTOVF} & Overflow intero.\\
+ \constd{FPE\_FLTDIV} & Divisione per zero in virgola mobile.\\
+ \constd{FPE\_FLTOVF} & Overflow in virgola mobile.\\
+ \constd{FPE\_FLTUND} & Underflow in virgola mobile.\\
+ \constd{FPE\_FLTRES} & Risultato in virgola mobile non esatto.\\
+ \constd{FPE\_FLTINV} & Operazione in virgola mobile non valida.\\
+ \constd{FPE\_FLTSUB} & Mantissa? fuori intervallo.\\
\hline
- \const{SEGV\_MAPERR} & Indirizzo non mappato.\\
- \const{SEGV\_ACCERR} & Permessi non validi per l'indirizzo.\\
+ \constd{SEGV\_MAPERR} & Indirizzo non mappato.\\
+ \constd{SEGV\_ACCERR} & Permessi non validi per l'indirizzo.\\
\hline
- \const{BUS\_ADRALN} & Allineamento dell'indirizzo non valido.\\
- \const{BUS\_ADRERR} & Indirizzo fisico inesistente.\\
- \const{BUS\_OBJERR} & Errore hardware sull'indirizzo.\\
+ \constd{BUS\_ADRALN} & Allineamento dell'indirizzo non valido.\\
+ \constd{BUS\_ADRERR} & Indirizzo fisico inesistente.\\
+ \constd{BUS\_OBJERR} & Errore hardware sull'indirizzo.\\
\hline
- \const{TRAP\_BRKPT} & Breakpoint sul processo.\\
- \const{TRAP\_TRACE} & Trappola di tracciamento del processo.\\
+ \constd{TRAP\_BRKPT} & Breakpoint sul processo.\\
+ \constd{TRAP\_TRACE} & Trappola di tracciamento del processo.\\
\hline
\constd{CLD\_EXITED} & Il figlio è uscito.\\
\constd{CLD\_KILLED} & Il figlio è stato terminato.\\
\constd{CLD\_STOPPED} & Il figlio è stato fermato.\\
\constd{CLD\_CONTINUED}& Il figlio è ripartito.\\
\hline
- \const{POLL\_IN} & Disponibili dati in ingresso.\\
- \const{POLL\_OUT} & Spazio disponibile sul buffer di uscita.\\
- \const{POLL\_MSG} & Disponibili messaggi in ingresso.\\
- \const{POLL\_ERR} & Errore di I/O.\\
- \const{POLL\_PRI} & Disponibili dati di alta priorità in ingresso.\\
- \const{POLL\_HUP} & Il dispositivo è stato disconnesso.\\
+ \constd{POLL\_IN} & Disponibili dati in ingresso.\\
+ \constd{POLL\_OUT} & Spazio disponibile sul buffer di uscita.\\
+ \constd{POLL\_MSG} & Disponibili messaggi in ingresso.\\
+ \constd{POLL\_ERR} & Errore di I/O.\\
+ \constd{POLL\_PRI} & Disponibili dati di alta priorità in ingresso.\\
+ \constd{POLL\_HUP} & Il dispositivo è stato disconnesso.\\
\hline
\end{tabular}
\caption{Valori del campo \var{si\_code} della struttura \struct{sigaction}
\label{tab:sig_si_code_special}
\end{table}
-Il resto della struttura \struct{siginfo\_t} è definito come una
-\dirct{union} ed i valori eventualmente presenti dipendono dal segnale
-ricevuto, così \signal{SIGCHLD} ed i segnali \textit{real-time} (vedi
+Il resto della struttura \struct{siginfo\_t} è definito come una \dirct{union}
+ed i valori eventualmente presenti dipendono dal segnale ricevuto, così
+\signal{SIGCHLD} ed i segnali \textit{real-time} (vedi
sez.~\ref{sec:sig_real_time}) inviati tramite \func{kill} avvalorano
\var{si\_pid} e \var{si\_uid} coi valori corrispondenti al processo che ha
emesso il segnale, \signal{SIGCHLD} avvalora anche i campi \var{si\_status},
\signal{SIGFPE}, \signal{SIGSEGV} e \signal{SIGBUS} avvalorano \var{si\_addr}
con l'indirizzo in cui è avvenuto l'errore, \signal{SIGIO} (vedi
sez.~\ref{sec:file_asyncronous_io}) avvalora \var{si\_fd} con il numero del
-file descriptor e \var{si\_band} per i \itindex{out-of-band} dati urgenti
-(vedi sez.~\ref{sec:TCP_urgent_data}) su un socket, il segnale inviato alla
-scadenza di un \itindex{POSIX~Timer~API} POSIX timer (vedi
-sez.~\ref{sec:sig_timer_adv}) avvalora i campi \var{si\_timerid} e
-\var{si\_overrun}.
+file descriptor e \var{si\_band} per i dati urgenti (vedi
+sez.~\ref{sec:TCP_urgent_data}) su un socket, il segnale inviato alla scadenza
+di un POSIX timer (vedi sez.~\ref{sec:sig_timer_adv}) avvalora i campi
+\var{si\_timerid} e \var{si\_overrun}.
Benché sia possibile usare nello stesso programma sia \func{sigaction} che
\func{signal} occorre molta attenzione, in quanto le due funzioni possono
\label{sec:sig_sigmask}
\index{maschera dei segnali|(}
-Come spiegato in sez.~\ref{sec:sig_semantics} tutti i moderni sistemi unix-like
-permettono di bloccare temporaneamente (o di eliminare completamente,
-impostando come azione \const{SIG\_IGN}) la consegna dei segnali ad un
-processo. Questo è fatto specificando la cosiddetta \textsl{maschera dei
- segnali} (o \textit{signal mask}) del processo\footnote{nel caso di Linux
- essa è mantenuta dal campo \var{blocked} della \struct{task\_struct} del
- processo.} cioè l'insieme dei segnali la cui consegna è bloccata.
+
+Come spiegato in sez.~\ref{sec:sig_semantics} tutti i moderni sistemi
+unix-like permettono di bloccare temporaneamente (o di eliminare
+completamente, impostando come azione \const{SIG\_IGN}) la consegna dei
+segnali ad un processo. Questo è fatto specificando la cosiddetta
+\textsl{maschera dei segnali} (o \textit{signal mask}) del
+processo\footnote{nel caso di Linux essa è mantenuta dal campo \var{blocked}
+ della \struct{task\_struct} del processo.} cioè l'insieme dei segnali la cui
+consegna è bloccata.
Abbiamo accennato in sez.~\ref{sec:proc_fork} che la maschera dei segnali
viene ereditata dal padre alla creazione di un processo figlio, e abbiamo
\textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{SIG\_BLOCK} & L'insieme dei segnali bloccati è l'unione fra
- quello specificato e quello corrente.\\
- \const{SIG\_UNBLOCK} & I segnali specificati in \param{set} sono rimossi
- dalla maschera dei segnali, specificare la
- cancellazione di un segnale non bloccato è legale.\\
- \const{SIG\_SETMASK} & La maschera dei segnali è impostata al valore
- specificato da \param{set}.\\
+ \constd{SIG\_BLOCK} & L'insieme dei segnali bloccati è l'unione fra
+ quello specificato e quello corrente.\\
+ \constd{SIG\_UNBLOCK} & I segnali specificati in \param{set} sono rimossi
+ dalla maschera dei segnali, specificare la
+ cancellazione di un segnale non bloccato è legale.\\
+ \constd{SIG\_SETMASK} & La maschera dei segnali è impostata al valore
+ specificato da \param{set}.\\
\hline
\end{tabular}
\caption{Valori e significato dell'argomento \param{how} della funzione
vari meccanismi di notifica per restituire dati al gestore del segnale in
\var{si\_value}. Un campo di tipo \type{sigval\_t} è presente anche nella
struttura \struct{sigevent} (definita in fig.~\ref{fig:struct_sigevent}) che
-viene usata dai meccanismi di notifica come quelli per
-\itindex{POSIX~Timer~API} i timer POSIX (vedi sez.~\ref{sec:sig_timer_adv}),
-l'I/O asincrono (vedi sez.~\ref{sec:file_asyncronous_io}) o le code di
-messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}).
+viene usata dai meccanismi di notifica come quelli per i timer POSIX (vedi
+sez.~\ref{sec:sig_timer_adv}), l'I/O asincrono (vedi
+sez.~\ref{sec:file_asyncronous_io}) o le code di messaggi POSIX (vedi
+sez.~\ref{sec:ipc_posix_mq}).
A causa delle loro caratteristiche, la funzione \func{kill} non è adatta ad
inviare segnali \textit{real-time}, poiché non è in grado di fornire alcun
segnali \textit{real-time} (priorità e coda) saranno perse.
Secondo lo standard POSIX la profondità della coda è indicata dalla costante
-\const{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo
+\constd{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo
standard POSIX che non abbiamo riportato esplicitamente in
sez.~\ref{sec:sys_limits}. Il suo valore minimo secondo lo standard,
-\const{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una
+\constd{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una
dimensione variabile; fino alla versione 2.6.7 c'era un limite massimo globale
che poteva essere impostato come parametro del kernel in
-\sysctlfile{kernel/rtsig-max} ed il valore predefinito era pari a 1024. A
+\sysctlfiled{kernel/rtsig-max} ed il valore predefinito era pari a 1024. A
partire dal kernel 2.6.8 il valore globale è stato rimosso e sostituito dalla
risorsa \const{RLIMIT\_SIGPENDING} associata al singolo utente, che può essere
modificata con \func{setrlimit} come illustrato in
\subsection{La gestione avanzata delle temporizzazioni}
\label{sec:sig_timer_adv}
-% TODO: indicizzare i termini \itindex{POSIX~Timer~API} e HRT
-
Sia le funzioni per la gestione dei tempi viste in
sez.~\ref{sec:sys_cpu_times} che quelle per la gestione dei timer di
sez.~\ref{sec:sig_alarm_abort} sono state a lungo limitate dalla risoluzione
\textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{CLOCK\_REALTIME} & Orologio \textit{real-time} di sistema, può
+ \constd{CLOCK\_REALTIME} & Orologio \textit{real-time} di sistema, può
essere impostato solo con privilegi
amministrativi.\\
- \const{CLOCK\_MONOTONIC} & Orologio che indica un tempo monotono
+ \constd{CLOCK\_MONOTONIC} & Orologio che indica un tempo monotono
crescente (a partire da un tempo iniziale non
specificato) che non può essere modificato e
non cambia neanche in caso di reimpostazione
dell'orologio di sistema.\\
- \const{CLOCK\_PROCESS\_CPUTIME\_ID}& Contatore del tempo di CPU usato
+ \constd{CLOCK\_PROCESS\_CPUTIME\_ID}& Contatore del tempo di CPU usato
da un processo (il \textit{process time} di
sez.~\ref{sec:sys_cpu_times}, nel totale di
\textit{system time} e \textit{user time})
comprensivo di tutto il tempo di CPU usato
da eventuali \textit{thread}.\\
- \const{CLOCK\_THREAD\_CPUTIME\_ID}& Contatore del tempo di CPU
+ \constd{CLOCK\_THREAD\_CPUTIME\_ID}& Contatore del tempo di CPU
(\textit{user time} e \textit{system time})
usato da un singolo \textit{thread}.\\
\hline
- \const{CLOCK\_MONOTONIC\_RAW}&Simile al precedente, ma non subisce gli
+ \constd{CLOCK\_MONOTONIC\_RAW}&Simile al precedente, ma non subisce gli
aggiustamenti dovuti all'uso di NTP (viene
usato per fare riferimento ad una fonte
hardware). Questo orologio è specifico di
Linux, ed è disponibile a partire dal kernel
2.6.28.\\
- \const{CLOCK\_BOOTTIME} & Identico a \const{CLOCK\_MONOTONIC} ma tiene
+ \constd{CLOCK\_BOOTTIME} & Identico a \const{CLOCK\_MONOTONIC} ma tiene
conto anche del tempo durante il quale il
sistema è stato sospeso (nel caso di
sospensione in RAM o \textsl{ibernazione} su
disco. Questo orologio è specifico di Linux,
ed è disponibile a partire dal kernel
2.6.39.\\
- \const{CLOCK\_REALTIME\_ALARM}&Identico a \const{CLOCK\_REALTIME}, ma se
+ \constd{CLOCK\_REALTIME\_ALARM}&Identico a \const{CLOCK\_REALTIME}, ma se
usato per un timer il sistema sarà riattivato
anche se è in sospensione. Questo orologio è
specifico di Linux, ed è disponibile a
partire dal kernel 3.0.\\
- \const{CLOCK\_BOOTTIME\_ALARM}&Identico a \const{CLOCK\_BOOTTIME}, ma se
+ \constd{CLOCK\_BOOTTIME\_ALARM}&Identico a \const{CLOCK\_BOOTTIME}, ma se
usato per un timer il sistema sarà riattivato
anche se è in sospensione. Questo orologio è
specifico di Linux, ed è disponibile a
estensioni \textit{real-time} usando esplicitamente l'opzione \texttt{-lrt}.
Si tenga presente inoltre che la disponibilità di queste funzionalità avanzate
-può essere controllato dalla definizione della macro \macro{\_POSIX\_TIMERS}
+può essere controllato dalla definizione della macro \macrod{\_POSIX\_TIMERS}
ad un valore maggiore di 0, e che le ulteriori macro
-\macro{\_POSIX\_MONOTONIC\_CLOCK}, \macro{\_POSIX\_CPUTIME} e
-\macro{\_POSIX\_THREAD\_CPUTIME} indicano la presenza dei rispettivi orologi
+\macrod{\_POSIX\_MONOTONIC\_CLOCK}, \macrod{\_POSIX\_CPUTIME} e
+\macrod{\_POSIX\_THREAD\_CPUTIME} indicano la presenza dei rispettivi orologi
di tipo \const{CLOCK\_MONOTONIC}, \const{CLOCK\_PROCESS\_CPUTIME\_ID} e
-\const{CLOCK\_PROCESS\_CPUTIME\_ID}; tutte queste macro sono definite in
+\const{CLOCK\_THREAD\_CPUTIME\_ID}; tutte queste macro sono definite in
\headfile{unistd.h}, che pertanto deve essere incluso per poterle
controllarle. Infine se il kernel ha il supporto per gli \textit{high
resolution timer} un elenco degli orologi e dei timer può essere ottenuto
\textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{SIGEV\_NONE} & Non viene inviata nessuna notifica.\\
- \const{SIGEV\_SIGNAL} & La notifica viene effettuata inviando al processo
+ \constd{SIGEV\_NONE} & Non viene inviata nessuna notifica.\\
+ \constd{SIGEV\_SIGNAL} & La notifica viene effettuata inviando al processo
chiamante il segnale specificato dal campo
\var{sigev\_signo}; se il gestore di questo
segnale è stato installato con
\dirct{union} \texttt{sigval}, la cui definizione
è in fig.~\ref{fig:sig_sigval}) come valore del
campo \var{si\_value} di \struct{siginfo\_t}.\\
- \const{SIGEV\_THREAD} & La notifica viene effettuata creando un nuovo
+ \constd{SIGEV\_THREAD} & La notifica viene effettuata creando un nuovo
\textit{thread} che esegue la funzione di
notifica specificata da
\var{sigev\_notify\_function} con argomento
\val{NULL}, il \textit{thread} viene creato con
gli attributi specificati da
\var{sigev\_notify\_attribute}.\footnotemark\\
- \const{SIGEV\_THREAD\_ID}& Invia la notifica come segnale (con le stesse
+ \constd{SIGEV\_THREAD\_ID}& Invia la notifica come segnale (con le stesse
modalità di \const{SIGEV\_SIGNAL}) che però viene
recapitato al \textit{thread} indicato dal campo
\var{sigev\_notify\_thread\_id}. Questa modalità
valore di \param{flags} è nullo, questo valore viene considerato come un
intervallo relativo al tempo corrente, il primo allarme scatterà cioè dopo il
numero di secondi e nanosecondi indicati da questo campo. Se invece si usa
-per \param{flags} il valore \const{TIMER\_ABSTIME}, che al momento è l'unico
+per \param{flags} il valore \constd{TIMER\_ABSTIME}, che al momento è l'unico
valore valido per \param{flags}, allora \var{it\_value} viene considerato come
un valore assoluto rispetto al valore usato dall'orologio a cui è associato il
timer.
funzione ritorna immediatamente senza nessuna sospensione. In caso di
interruzione da parte di un segnale il tempo rimanente viene restituito
in \param{remain} soltanto se questo non è un puntatore \val{NULL} e non si è
-specificato \const{TIMER\_ABSTIME} per \param{flags} .
+specificato \const{TIMER\_ABSTIME} per \param{flags}.
-% TODO manca clock_nanosleep, referenziata in sez.~\ref{sec:sig_gen_beha}
\itindend{POSIX~Timer~API}
In genere il primo passo viene effettuato allocando un'opportuna area di
memoria con \code{malloc}; in \headfile{signal.h} sono definite due costanti,
-\const{SIGSTKSZ} e \const{MINSIGSTKSZ}, che possono essere utilizzate per
+\constd{SIGSTKSZ} e \constd{MINSIGSTKSZ}, che possono essere utilizzate per
allocare una quantità di spazio opportuna, in modo da evitare overflow. La
prima delle due è la dimensione canonica per uno \textit{stack} di segnali e
di norma è sufficiente per tutti gli usi normali.
nuovo \textit{stack} occorre inizializzare \var{ss\_sp} e \var{ss\_size}
rispettivamente al puntatore e alla dimensione della memoria allocata, mentre
\var{ss\_flags} deve essere nullo. Se invece si vuole disabilitare uno
-\textit{stack} occorre indicare \const{SS\_DISABLE} come valore di
+\textit{stack} occorre indicare \constd{SS\_DISABLE} come valore di
\var{ss\_flags} e gli altri valori saranno ignorati.
Se \param{oss} non è nullo verrà restituito dalla funzione indirizzo e
dimensione dello \textit{stack} corrente nei relativi campi, mentre
-\var{ss\_flags} potrà assumere il valore \const{SS\_ONSTACK} se il processo è
+\var{ss\_flags} potrà assumere il valore \constd{SS\_ONSTACK} se il processo è
in esecuzione sullo \textit{stack} alternativo (nel qual caso non è possibile
cambiarlo) e \const{SS\_DISABLE} se questo non è abilitato.
viene usata come buffer per i dati, mentre il valore letto da
\func{getsockopt} e quello riportato nei vari parametri di
\textit{sysctl}\footnote{cioè \sysctlrelfile{net/core}{wmem\_max} e
- \sysctlrelfile{net/core}{rmem\_max} in \texttt{/proc/sys/net/core}
- e \sysctlrelfile{net/ipv4}{tcp\_wmem} e
- \sysctlrelfile{net/ipv4}{tcp\_rmem} in
- \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica la
- memoria effettivamente impiegata. Si tenga presente inoltre che le
+ \sysctlrelfile{net/core}{rmem\_max} in \texttt{/proc/sys/net/core} e
+ \sysctlrelfile{net/ipv4}{tcp\_wmem} e \sysctlrelfile{net/ipv4}{tcp\_rmem}
+ in \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica
+ la memoria effettivamente impiegata. Si tenga presente inoltre che le
modifiche alle dimensioni dei buffer di ricezione e trasmissione, per poter
essere effettive, devono essere impostate prima della chiamata alle funzioni
\func{listen} o \func{connect}.
\itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time} cui abbiamo già
accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
-\item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
- \textit{process group} a cui inviare i segnali \signal{SIGIO} e
- \signal{SIGURG} quando viene completata una operazione di I/O asincrono o
- arrivano dei dati urgenti \itindex{out-of-band} (\texttt{out-of-band}). Il
- terzo argomento deve essere un puntatore ad una variabile di tipo
- \type{pid\_t}; un valore positivo indica direttamente il \ids{PID} del
- processo, mentre un valore negativo indica (col valore assoluto) il
- \textit{process group}. Senza privilegi di amministratore o la capability
- \const{CAP\_KILL} si può impostare solo se stessi o il proprio
- \textit{process group}.
+\item[\const{SIOCSPGRP}] imposta il processo o il \textit{process group} a cui
+ inviare i segnali \signal{SIGIO} e \signal{SIGURG} quando viene completata
+ una operazione di I/O asincrono o arrivano dei dati urgenti
+ \itindex{out-of-band} (\texttt{out-of-band}). Il terzo argomento deve essere
+ un puntatore ad una variabile di tipo \type{pid\_t}; un valore positivo
+ indica direttamente il \ids{PID} del processo, mentre un valore negativo
+ indica (col valore assoluto) il \textit{process group}. Senza privilegi di
+ amministratore o la capability \const{CAP\_KILL} si può impostare solo se
+ stessi o il proprio \textit{process group}.
\item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
- relativamente all'eventuale processo o \itindex{process~group}
- \textit{process group} cui devono essere inviati i segnali \signal{SIGIO} e
- \signal{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un
- puntatore ad una variabile di tipo \type{pid\_t}, con lo stesso significato.
- Qualora non sia presente nessuna impostazione verrà restituito un valore
- nullo.
+ relativamente all'eventuale processo o \textit{process group} cui devono
+ essere inviati i segnali \signal{SIGIO} e \signal{SIGURG}. Come per
+ \const{SIOCSPGRP} l'argomento passato deve un puntatore ad una variabile di
+ tipo \type{pid\_t}, con lo stesso significato. Qualora non sia presente
+ nessuna impostazione verrà restituito un valore nullo.
\item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul
socket. Questo significa (vedi sez.~\ref{sec:signal_driven_io}) che verrà
\texttt{man 7 socket} sono i seguenti:
\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\sysctlrelfile{net/core}{rmem\_default}] imposta la dimensione
+\item[\sysctlrelfiled{net/core}{rmem\_default}] imposta la dimensione
di default del buffer di ricezione (cioè per i dati in ingresso) dei socket.
-\item[\sysctlrelfile{net/core}{rmem\_max}] imposta la dimensione
+\item[\sysctlrelfiled{net/core}{rmem\_max}] imposta la dimensione
massima che si può assegnare al buffer di ricezione dei socket attraverso
l'uso dell'opzione \const{SO\_RCVBUF}.
-\item[\sysctlrelfile{net/core}{wmem\_default}] imposta la dimensione
+\item[\sysctlrelfiled{net/core}{wmem\_default}] imposta la dimensione
di default del buffer di trasmissione (cioè per i dati in uscita) dei
socket.
-\item[\sysctlrelfile{net/core}{wmem\_max}] imposta la dimensione
+\item[\sysctlrelfiled{net/core}{wmem\_max}] imposta la dimensione
massima che si può assegnare al buffer di trasmissione dei socket attraverso
l'uso dell'opzione \const{SO\_SNDBUF}.
-\item[\sysctlrelfile{net/core}{message\_cost},
- \sysctlrelfile{net/core}{message\_burst}] contengono le impostazioni
+\item[\sysctlrelfiled{net/core}{message\_cost},
+ \sysctlrelfiled{net/core}{message\_burst}] contengono le impostazioni
del \itindex{bucket~filter} \textit{bucket filter} che controlla l'emissione
di messaggi di avviso da parte del kernel per eventi relativi a problemi
sulla rete, imponendo un limite che consente di prevenire eventuali attacchi
emissione (verranno accettati inizialmente fino ad un massimo di
\texttt{message\_cost/message\_burst} messaggi).
-\item[\sysctlrelfile{net/core}{netdev\_max\_backlog}] numero massimo
+\item[\sysctlrelfiled{net/core}{netdev\_max\_backlog}] numero massimo
di pacchetti che possono essere contenuti nella coda di ingresso generale.
-\item[\sysctlrelfile{net/core}{optmem\_max}] lunghezza massima dei
+\item[\sysctlrelfiled{net/core}{optmem\_max}] lunghezza massima dei
dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}).
\end{basedescript}
nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di
questi però non è documentato:
\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\sysctlrelfile{net/core}{dev\_weight}] blocco di lavoro (\textit{work
+\item[\sysctlrelfiled{net/core}{dev\_weight}] blocco di lavoro (\textit{work
quantum}) dello \textit{scheduler} di processo dei pacchetti.
% TODO da documentare meglio
-\item[\sysctlrelfile{net/core}{lo\_cong}] valore per l'occupazione
+\item[\sysctlrelfiled{net/core}{lo\_cong}] valore per l'occupazione
della coda di ricezione sotto la quale si considera di avere una bassa
congestione.
-\item[\sysctlrelfile{net/core}{mod\_cong}] valore per l'occupazione
+\item[\sysctlrelfiled{net/core}{mod\_cong}] valore per l'occupazione
della coda di ricezione sotto la quale si considera di avere una congestione
moderata.
-\item[\sysctlrelfile{net/core}{no\_cong}] valore per l'occupazione
+\item[\sysctlrelfiled{net/core}{no\_cong}] valore per l'occupazione
della coda di ricezione sotto la quale si considera di non avere
congestione.
-\item[\sysctlrelfile{net/core}{no\_cong\_thresh}] valore minimo
+\item[\sysctlrelfiled{net/core}{no\_cong\_thresh}] valore minimo
(\textit{low water mark}) per il riavvio dei dispositivi congestionati.
- % \item[\sysctlrelfile{net/core}{netdev\_fastroute}] è presente
+ % \item[\sysctlrelfiled{net/core}{netdev\_fastroute}] è presente
% soltanto quando si è compilato il kernel con l'apposita opzione di
% ottimizzazione per l'uso come router.
-\item[\sysctlrelfile{net/core}{somaxconn}] imposta la dimensione
+\item[\sysctlrelfiled{net/core}{somaxconn}] imposta la dimensione
massima utilizzabile per il \textit{backlog} della funzione \func{listen}
(vedi sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della
costante \const{SOMAXCONN}; il suo valore di default è 128.
di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\sysctlrelfile{net/ipv4}{ip\_default\_ttl}] imposta il valore di
+\item[\sysctlrelfiled{net/ipv4}{ip\_default\_ttl}] imposta il valore di
default per il campo TTL (vedi sez.~\ref{sec:IP_header}) di tutti i
pacchetti uscenti, stabilendo così il numero massimo di router che i
pacchetti possono attraversare. Il valore può essere modificato anche per il
quanto in caso di problemi di routing si allunga inutilmente il numero di
ritrasmissioni.
-\item[\sysctlrelfile{net/ipv4}{ip\_forward}] abilita l'inoltro dei
+\item[\sysctlrelfiled{net/ipv4}{ip\_forward}] abilita l'inoltro dei
pacchetti da una interfaccia ad un altra, e può essere impostato anche per
la singola interfaccia. Prende un valore logico (0 disabilita, diverso da
zero abilita), di default è disabilitato.
-\item[\sysctlrelfile{net/ipv4}{ip\_dynaddr}] abilita la riscrittura
+\item[\sysctlrelfiled{net/ipv4}{ip\_dynaddr}] abilita la riscrittura
automatica degli indirizzi associati ad un socket quando una interfaccia
cambia indirizzo. Viene usato per le interfacce usate nei collegamenti in
dial-up, il cui indirizzo IP viene assegnato dinamicamente dal provider, e
diverso dai precedenti) la si abilità in modalità \textsl{prolissa}; di
default la funzionalità è disabilitata.
-\item[\sysctlrelfile{net/ipv4}{ip\_autoconfig}] specifica se
+\item[\sysctlrelfiled{net/ipv4}{ip\_autoconfig}] specifica se
l'indirizzo IP è stato configurato automaticamente dal kernel all'avvio
attraverso DHCP, BOOTP o RARP. Riporta un valore logico (0 falso, 1 vero)
accessibile solo in lettura, è inutilizzato nei kernel recenti ed eliminato
a partire dal kernel 2.6.18.
-\item[\sysctlrelfile{net/ipv4}{ip\_local\_port\_range}] imposta
+\item[\sysctlrelfiled{net/ipv4}{ip\_local\_port\_range}] imposta
l'intervallo dei valori usati per l'assegnazione delle porte effimere,
permette cioè di modificare i valori illustrati in
fig.~\ref{fig:TCP_port_alloc}; prende due valori interi separati da spazi,
valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare
conflitti con le porte usate dai servizi noti.
-\item[\sysctlrelfile{net/ipv4}{ip\_no\_pmtu\_disc}] permette di disabilitare
+\item[\sysctlrelfiled{net/ipv4}{ip\_no\_pmtu\_disc}] permette di disabilitare
per i socket \const{SOCK\_STREAM} la ricerca automatica della \textit{Path
MTU} (vedi sez.~\ref{sec:net_lim_dim} e
sez.~\ref{sec:sock_ipv4_options}). Prende un valore logico, e di default è
disabilitare globalmente il procedimento con questo parametro ha pesanti
ripercussioni in termini di prestazioni di rete.
-\item[\sysctlrelfile{net/ipv4}{ip\_always\_defrag}] fa si che tutti i
+\item[\sysctlrelfiled{net/ipv4}{ip\_always\_defrag}] fa si che tutti i
pacchetti IP frammentati siano riassemblati, anche in caso in successivo
immediato inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni
precedenti questo comportamento poteva essere solo stabilito un volta per
\itindex{netfilter} \textit{netfilter}, e questo parametro non è più
presente.
-\item[\sysctlrelfile{net/ipv4}{ipfrag\_high\_thresh}] indica il limite
+\item[\sysctlrelfiled{net/ipv4}{ipfrag\_high\_thresh}] indica il limite
massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
in coda; quando questo valore viene raggiunta la coda viene ripulita fino al
valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
-\item[\sysctlrelfile{net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
+\item[\sysctlrelfiled{net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
(specificata in byte) a cui viene riportata la coda dei pacchetti IP
frammentati quando si raggiunge il valore massimo dato da
\texttt{ipfrag\_high\_thresh}. Prende un valore intero.
-\item[\sysctlrelfile{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
+\item[\sysctlrelfiled{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
possibile ad una applicazione eseguire \func{bind} anche su un indirizzo che
non è presente su nessuna interfaccia locale. Prende un valore logico e di
default è disabilitato.
pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\sysctlrelfile{net/ipv4}{tcp\_abort\_on\_overflow}] indica al
+\item[\sysctlrelfiled{net/ipv4}{tcp\_abort\_on\_overflow}] indica al
kernel di azzerare le connessioni quando il programma che le riceve è troppo
lento ed incapace di accettarle. Prende un valore logico ed è disabilitato
di default. Questo consente di recuperare le connessioni se si è avuto un
quando si è sicuri che non è possibile ottimizzare il server in modo che sia
in grado di accettare connessioni più rapidamente.
-\item[\sysctlrelfile{net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel quale
+\item[\sysctlrelfiled{net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel quale
frazione del buffer associato ad un socket\footnote{quello impostato con
\sysctlrelfile{net/ipv4}{tcp\_rmem}.} deve essere utilizzata per la
finestra del protocollo TCP\footnote{in sostanza il valore che costituisce
negativo. Il default è 2 che significa che al buffer dell'applicazione
viene riservato un quarto del totale.
-\item[\sysctlrelfile{net/ipv4}{tcp\_app\_win}] indica la frazione della
+\item[\sysctlrelfiled{net/ipv4}{tcp\_app\_win}] indica la frazione della
finestra TCP che viene riservata per gestire l'overhaed dovuto alla
bufferizzazione. Prende un valore valore intero che consente di calcolare la
dimensione in byte come il massimo fra la
% \item[\texttt{tcp\_bic\_low\_window}]
% \item[\texttt{tcp\_bic\_fast\_convergence}]
-\item[\sysctlrelfile{net/ipv4}{tcp\_dsack}] abilita il supporto,
+\item[\sysctlrelfiled{net/ipv4}{tcp\_dsack}] abilita il supporto,
definito nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}, per il
cosiddetto \textit{Duplicate SACK}.\footnote{si indica con SACK
(\textit{Selective Acknowledgement}) un'opzione TCP, definita
% mettere riferimento nelle appendici
-\item[\sysctlrelfile{net/ipv4}{tcp\_ecn}] abilita il meccanismo della
+\item[\sysctlrelfiled{net/ipv4}{tcp\_ecn}] abilita il meccanismo della
\textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni
TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit
Congestion Notification} \itindex{Explicit~Congestion~Notification} è un
% mettere riferimento nelle appendici
-\item[\sysctlrelfile{net/ipv4}{tcp\_fack}] abilita il supporto per il
+\item[\sysctlrelfiled{net/ipv4}{tcp\_fack}] abilita il supporto per il
\textit{TCP Forward Acknowledgement}, un algoritmo per il controllo della
congestione del traffico. Prende un valore logico e di default è abilitato.
% TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement o
% mettere riferimento nelle appendici
-\item[\sysctlrelfile{net/ipv4}{tcp\_fin\_timeout}] specifica il numero
+\item[\sysctlrelfiled{net/ipv4}{tcp\_fin\_timeout}] specifica il numero
di secondi da passare in stato \texttt{FIN\_WAIT2} nell'attesa delle
ricezione del pacchetto FIN conclusivo, passati quali il socket viene
comunque chiuso forzatamente. Prende un valore intero che indica i secondi
ma è utile per fronteggiare alcuni attacchi di
\itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}.
-\item[\sysctlrelfile{net/ipv4}{tcp\_frto}] abilita il supporto per
+\item[\sysctlrelfiled{net/ipv4}{tcp\_frto}] abilita il supporto per
l'algoritmo F-RTO, un algoritmo usato per la ritrasmissione dei timeout del
protocollo TCP, che diventa molto utile per le reti wireless dove la perdita
di pacchetti è usualmente dovuta a delle interferenze radio, piuttosto che
alla congestione dei router. Prende un valore logico e di default è
disabilitato.
-\item[\sysctlrelfile{net/ipv4}{tcp\_keepalive\_intvl}] indica il
+\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_intvl}] indica il
numero di secondi che deve trascorrere fra l'emissione di due successivi
pacchetti di test quando è abilitata la funzionalità del \textit{keepalive}
(vedi sez.~\ref{sec:sock_options_main}). Prende un valore intero che di
default è 75.
-\item[\sysctlrelfile{net/ipv4}{tcp\_keepalive\_probes}] indica il
+\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_probes}] indica il
massimo numero pacchetti di \textit{keepalive} (vedi
sez.~\ref{sec:sock_options_main}) che devono essere inviati senza ricevere
risposta prima che il kernel decida che la connessione è caduta e la
termini. Prende un valore intero che di default è 9.
-\item[\sysctlrelfile{net/ipv4}{tcp\_keepalive\_time}] indica il numero
+\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_time}] indica il numero
di secondi che devono passare senza traffico sulla connessione prima che il
kernel inizi ad inviare pacchetti di pacchetti di
\textit{keepalive}.\footnote{ha effetto solo per i socket per cui si è
sez.~\ref{sec:sock_options_main}.} Prende un valore intero che di default
è 7200, pari a due ore.
-\item[\sysctlrelfile{net/ipv4}{tcp\_low\_latency}] indica allo stack
+\item[\sysctlrelfiled{net/ipv4}{tcp\_low\_latency}] indica allo stack
TCP del kernel di ottimizzare il comportamento per ottenere tempi di latenza
più bassi a scapito di valori più alti per l'utilizzo della banda. Prende un
valore logico che di default è disabilitato in quanto un maggior utilizzo
riduzione della latenza è più importante (ad esempio per i cluster di
calcolo parallelo) nelle quali lo si può abilitare.
-\item[\sysctlrelfile{net/ipv4}{tcp\_max\_orphans}] indica il numero
+\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_orphans}] indica il numero
massimo di socket TCP ``\textsl{orfani}'' (vale a dire non associati a
nessun file descriptor) consentito nel sistema.\footnote{trattasi in genere
delle connessioni relative a socket chiusi che non hanno completato il
% TODO verificare la spiegazione di connessione orfana.
-\item[\sysctlrelfile{net/ipv4}{tcp\_max\_syn\_backlog}] indica la
+\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_syn\_backlog}] indica la
lunghezza della coda delle connessioni incomplete, cioè delle connessioni
per le quali si è ricevuto un SYN di richiesta ma non l'ACK finale del
\itindex{three~way~handshake} \textit{three way handshake} (si riveda quanto
del kernel, in modo che sia $\mathtt{tcp\_max\_syn\_backlog} \ge
\mathtt{16*TCP\_SYNQ\_HSIZE}$, per poi ricompilare il kernel.}
-\item[\sysctlrelfile{net/ipv4}{tcp\_max\_tw\_buckets}] indica il
+\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_tw\_buckets}] indica il
numero massimo di socket in stato \texttt{TIME\_WAIT} consentito nel
sistema. Prende un valore intero di default è impostato al doppio del valore
del parametro \texttt{NR\_FILE}, ma che viene aggiustato automaticamente a
prevenire alcuni semplici attacchi di \textit{denial of service}.
-\item[\sysctlrelfile{net/ipv4}{tcp\_mem}] viene usato dallo stack TCP
+\item[\sysctlrelfiled{net/ipv4}{tcp\_mem}] viene usato dallo stack TCP
per gestire le modalità con cui esso utilizzerà la memoria. Prende una
tripletta di valori interi, che indicano un numero di pagine:
ogni altro valore specificato dagli altri limiti del kernel.
\end{itemize*}
-\item[\sysctlrelfile{net/ipv4}{tcp\_orphan\_retries}] indica il numero
+\item[\sysctlrelfiled{net/ipv4}{tcp\_orphan\_retries}] indica il numero
massimo di volte che si esegue un tentativo di controllo sull'altro capo di
una connessione che è stata già chiusa dalla nostra parte. Prende un valore
intero che di default è 8.
-\item[\sysctlrelfile{net/ipv4}{tcp\_reordering}] indica il numero
+\item[\sysctlrelfiled{net/ipv4}{tcp\_reordering}] indica il numero
massimo di volte che un pacchetto può essere riordinato nel flusso di dati,
prima che lo stack TCP assuma che è andato perso e si ponga nello stato di
\textit{slow start} (si veda sez.~\ref{sec:tcp_protocol_xxx}) viene usata
ritrasmissioni provocate dal riordinamento. Prende un valore intero che di
default che è 3, e che non è opportuno modificare.
-\item[\sysctlrelfile{net/ipv4}{tcp\_retrans\_collapse}] in caso di
+\item[\sysctlrelfiled{net/ipv4}{tcp\_retrans\_collapse}] in caso di
pacchetti persi durante una connessione, per ottimizzare l'uso della banda
il kernel cerca di eseguire la ritrasmissione inviando pacchetti della
massima dimensione possibile; in sostanza dati che in precedenza erano stati
pacchetto (o su un numero minore di pacchetti di dimensione
maggiore). Prende un valore logico e di default è abilitato.
-\item[\sysctlrelfile{net/ipv4}{tcp\_retries1}] imposta il massimo
+\item[\sysctlrelfiled{net/ipv4}{tcp\_retries1}] imposta il massimo
numero di volte che protocollo tenterà la ritrasmissione si un pacchetto su
una connessione stabilita prima di fare ricorso ad ulteriori sforzi che
coinvolgano anche il livello di rete. Passato questo numero di
aggiornamento della rotta verso la destinazione prima di eseguire ogni
successiva ritrasmissione. Prende un valore intero che di default è 3.
-\item[\sysctlrelfile{net/ipv4}{tcp\_retries2}] imposta il numero di
+\item[\sysctlrelfiled{net/ipv4}{tcp\_retries2}] imposta il numero di
tentativi di ritrasmissione di un pacchetto inviato su una connessione già
stabilita per il quale non si sia ricevuto una risposta di ACK (si veda
anche quanto illustrato in sez.~\ref{sec:TCP_server_crash}). Prende un
nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un
massimo di 100 secondi, che però è un valore considerato troppo basso.
-\item[\sysctlrelfile{net/ipv4}{tcp\_rfc1337}] indica al kernel di
+\item[\sysctlrelfiled{net/ipv4}{tcp\_rfc1337}] indica al kernel di
abilitare il comportamento richiesto
nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}. Prende un valore
logico e di default è disabilitato, il che significa che alla ricezione di
immediatamente senza attendere la conclusione del periodo di
\texttt{TIME\_WAIT}.
-\item[\sysctlrelfile{net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP
+\item[\sysctlrelfiled{net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP
per controllare dinamicamente le dimensioni dei propri buffer di ricezione,
anche in rapporto alla memoria disponibile. Prende una tripletta di valori
interi separati da spazi che indicano delle dimensioni in byte:
dichiarata con l'opzione \const{SO\_RCVBUF}.
\end{itemize}
-\item[\sysctlrelfile{net/ipv4}{tcp\_sack}] indica al kernel di
+\item[\sysctlrelfiled{net/ipv4}{tcp\_sack}] indica al kernel di
utilizzare il meccanismo del \textit{TCP selective acknowledgement} definito
nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}. Prende un valore
logico e di default è abilitato.
-\item[\sysctlrelfile{net/ipv4}{tcp\_stdurg}] indica al kernel di
+\item[\sysctlrelfiled{net/ipv4}{tcp\_stdurg}] indica al kernel di
utilizzare l'interpretazione che viene data
dall'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} del puntatore dei
\textit{dati urgenti} (vedi sez.~\ref{sec:TCP_urgent_data}) in cui questo
Prende un valore logico e di default è disabilitato, perché abilitarlo può
dar luogo a problemi di interoperabilità.
-\item[\sysctlrelfile{net/ipv4}{tcp\_synack\_retries}] indica il numero
+\item[\sysctlrelfiled{net/ipv4}{tcp\_synack\_retries}] indica il numero
massimo di volte che verrà ritrasmesso il segmento SYN/ACK nella creazione di
una connessione (vedi sez.~\ref{sec:TCP_conn_cre}). Prende un valore intero
ed il valore di default è 5; non si deve superare il valore massimo di 255.
-\item[\sysctlrelfile{net/ipv4}{tcp\_syncookies}] abilita i \textit{TCP
+\item[\sysctlrelfiled{net/ipv4}{tcp\_syncookies}] abilita i \textit{TCP
syncookies}.\footnote{per poter usare questa funzionalità è necessario
avere abilitato l'opzione \texttt{CONFIG\_SYN\_COOKIES} nella compilazione
del kernel.} Prende un valore logico, e di default è disabilitato. Questa
funzionalità come le estensioni e può causare problemi per i client ed il
reinoltro dei pacchetti.
-\item[\sysctlrelfile{net/ipv4}{tcp\_syn\_retries}] imposta il numero
+\item[\sysctlrelfiled{net/ipv4}{tcp\_syn\_retries}] imposta il numero
di tentativi di ritrasmissione dei pacchetti SYN di inizio connessione del
\itindex{three~way~handshake} \textit{three way handshake} (si ricordi
quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Prende un valore
intero che di default è 5; non si deve superare il valore massimo di 255.
-\item[\sysctlrelfile{net/ipv4}{tcp\_timestamps}] abilita l'uso dei
+\item[\sysctlrelfiled{net/ipv4}{tcp\_timestamps}] abilita l'uso dei
\textit{TCP timestamps}, come definiti
nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore
logico e di default è abilitato.
-\item[\sysctlrelfile{net/ipv4}{tcp\_tw\_recycle}] abilita il
+\item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_recycle}] abilita il
riutilizzo rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore
logico e di default è disabilitato. Non è opportuno abilitare questa opzione
che può causare problemi con il NAT.\footnote{il \textit{Network Address
\textit{netfilter}, per maggiori dettagli si consulti il cap.~2 di
\cite{FwGL}.}
-\item[\sysctlrelfile{net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo
+\item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo
dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista
del protocollo. Prende un valore logico e di default è disabilitato.
-\item[\sysctlrelfile{net/ipv4}{tcp\_window\_scaling}] un valore
+\item[\sysctlrelfiled{net/ipv4}{tcp\_window\_scaling}] un valore
logico, attivo di default, che abilita la funzionalità del
\itindex{TCP~window~scaling} \textit{TCP window scaling} definita
dall'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore
\itindex{TCP~window~scaling} \textit{TCP window scaling} con l'altro capo
della connessione non viene effettuata.
-%\item[\sysctlrelfile{net/ipv4}{tcp\_vegas\_cong\_avoid}]
+%\item[\sysctlrelfiled{net/ipv4}{tcp\_vegas\_cong\_avoid}]
% TODO: controllare su internet
-%\item[\sysctlrelfile{net/ipv4}{tcp\_westwood}]
+%\item[\sysctlrelfiled{net/ipv4}{tcp\_westwood}]
% TODO: controllare su internet
-\item[\sysctlrelfile{net/ipv4}{tcp\_wmem}] viene usato dallo stack TCP
+\item[\sysctlrelfiled{net/ipv4}{tcp\_wmem}] viene usato dallo stack TCP
per controllare dinamicamente le dimensioni dei propri buffer di spedizione,
adeguandole in rapporto alla memoria disponibile. Prende una tripletta di
valori interi separati da spazi che indicano delle dimensioni in byte:
Indica se il sistema supporta i
\textit{saved id} (vedi
sez.~\ref{sec:proc_access_id}).\\
- \texttt{\_SC\_VERSION} & \const{\_POSIX\_VERSION} &
+ \texttt{\_SC\_VERSION} & \macro{\_POSIX\_VERSION} &
Indica il mese e l'anno di approvazione
della revisione dello standard POSIX.1 a cui
il sistema fa riferimento, nel formato
Come accennato queste stesse informazioni, anche se a differenza di
\func{sysctl} la funzione continua ad essere mantenuta, si possono ottenere
direttamente tramite il filesystem \file{/proc}, esse infatti sono mantenute
-rispettivamente nei file \sysctlrelfile{kernel}{ostype},
-\sysctlrelfile{kernel}{hostname}, \sysctlrelfile{kernel}{osrelease},
-\sysctlrelfile{kernel}{version} e \sysctlrelfile{kernel}{domainname} che si
+rispettivamente nei file \sysctlrelfiled{kernel}{ostype},
+\sysctlrelfiled{kernel}{hostname}, \sysctlrelfiled{kernel}{osrelease},
+\sysctlrelfiled{kernel}{version} e \sysctlrelfiled{kernel}{domainname} che si
trovano sotto la directory \file{/proc/sys/kernel/}.
\index{file!filesystem~\texttt {/proc}!definizione|)}
della apposita struttura dati definita all'interno del kernel.
Il funzionamento di \func{acct} viene inoltre modificato da uno specifico
-parametro di sistema, modificabile attraverso \sysctlfile{kernel/acct} (o
+parametro di sistema, modificabile attraverso \sysctlfiled{kernel/acct} (o
tramite la corrispondente \func{sysctl}). Esso contiene tre valori interi, il
primo indica la percentuale di spazio disco libero sopra il quale viene
ripresa una registrazione che era stata sospesa per essere scesi sotto il
indicare la lunghezza della coda delle connessioni complete. La lunghezza
della coda delle connessioni incomplete può essere ancora controllata usando
la funzione \func{sysctl} con il parametro \const{NET\_TCP\_MAX\_SYN\_BACKLOG}
-o scrivendola direttamente in
-\sysctlfile{net/ipv4/tcp\_max\_syn\_backlog}. Quando si attiva la
-protezione dei syncookies però (con l'opzione da compilare nel kernel e da
-attivare usando \sysctlfile{net/ipv4/tcp\_syncookies}) questo valore
-viene ignorato e non esiste più un valore massimo. In ogni caso in Linux il
-valore di \param{backlog} viene troncato ad un massimo di \const{SOMAXCONN} se
-è superiore a detta costante (che di default vale 128).\footnote{il valore di
- questa costante può essere controllato con un altro parametro di
- \func{sysctl}, vedi sez.~\ref{sec:sock_ioctl_IP}.}
+o scrivendola direttamente in \sysctlfile{net/ipv4/tcp\_max\_syn\_backlog}.
+Quando si attiva la protezione dei syncookies però (con l'opzione da compilare
+nel kernel e da attivare usando \sysctlfile{net/ipv4/tcp\_syncookies}) questo
+valore viene ignorato e non esiste più un valore massimo. In ogni caso in
+Linux il valore di \param{backlog} viene troncato ad un massimo di
+\const{SOMAXCONN} se è superiore a detta costante (che di default vale
+128).\footnote{il valore di questa costante può essere controllato con un
+ altro parametro di \func{sysctl}, vedi sez.~\ref{sec:sock_ioctl_IP}.}
La scelta storica per il valore di questo parametro era di 5, e alcuni vecchi
kernel non supportavano neanche valori superiori, ma la situazione corrente è
Il risultato finale qui dipende dall'implementazione dello stack TCP, e nel
caso di Linux anche dall'impostazione di alcuni dei parametri di sistema che
si trovano in \file{/proc/sys/net/ipv4}, che ne controllano il comportamento:
-in questo caso in particolare da
-\sysctlrelfile{net/ipv4}{tcp\_retries2} (vedi
+in questo caso in particolare da \sysctlrelfile{net/ipv4}{tcp\_retries2} (vedi
sez.~\ref{sec:sock_ipv4_sysctl}). Questo parametro infatti specifica il numero
di volte che deve essere ritentata la ritrasmissione di un pacchetto nel mezzo
di una connessione prima di riportare un errore di timeout. Il valore