X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=639cf0dd90d7892a921f4737fcd7f647ef20d3d3;hp=862099b4dfb9f5c0f38a4dd8f46de1c00b252499;hb=0e932d7963332ca87688c3695d7386d45ddcc46a;hpb=fb71887fc0911d61330d6a81fd0f854ffe587666 diff --git a/session.tex b/session.tex index 862099b..639cf0d 100644 --- a/session.tex +++ b/session.tex @@ -1,6 +1,6 @@ %% session.tex %% -%% Copyright (C) 2000-2013 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2019 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -98,21 +98,21 @@ dei compiti specifici. 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 @@ -237,14 +237,13 @@ prototipo è: \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 -\func{setpgid}, che vedremo a breve, negli argomenti e negli effetti. Nelle +\func{setpgid}, che vedremo a breve, negli argomenti e negli effetti. Nella \acr{glibc} viene sempre usata sempre questa definizione, a meno di non richiedere esplicitamente la compatibilità all'indietro con BSD, definendo la macro \macro{\_BSD\_SOURCE} ed evitando di definire le macro che richiedono @@ -295,8 +294,8 @@ sia dal processo padre, per impostare il valore nel figlio, che da quest'ultimo, per sé stesso, in modo che il cambiamento di \textit{process group} sia immediato per entrambi; una delle due chiamate sarà ridondante, ma non potendo determinare quale dei due processi viene eseguito per primo, -occorre eseguirle comunque entrambe per evitare di esporsi ad una -\itindex{race~condition} \textit{race condition}. +occorre eseguirle comunque entrambe per evitare di esporsi ad una \textit{race + condition}. Si noti come nessuna delle funzioni esaminate finora permetta di spostare un processo da una sessione ad un altra; infatti l'unico modo di far cambiare @@ -328,12 +327,11 @@ uguale al suo \ids{PID}) ed unico componente.\footnote{in Linux la proprietà è 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 @@ -384,7 +382,7 @@ automaticamente a meno di non avere richiesto esplicitamente il contrario 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 @@ -423,16 +421,15 @@ Come accennato in sez.~\ref{sec:sess_job_control_overview}, tutti i 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, @@ -465,15 +462,15 @@ La funzione legge il \textit{process group} di \textit{foreground} associato 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 @@ -522,27 +519,26 @@ controllo dello stesso. 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 @@ -587,7 +583,7 @@ di avvio di System V;\footnote{in realtà negli ultimi tempi questa situazione \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. @@ -622,18 +618,17 @@ dall'amministratore nel file di configurazione del programma, 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 @@ -655,21 +650,21 @@ numero di volte dopo di che \cmd{login} esce ed \cmd{init} provvede a rilanciare un'altra istanza di \cmd{getty}. Se invece la password corrisponde \cmd{login} esegue \func{chdir} per -impostare come \index{directory~di~lavoro} directory di lavoro la \textit{home - directory} dell'utente, cambia i diritti di accesso al terminale (con -\func{chown} e \func{chmod}) per assegnarne la titolarità all'utente ed al suo -gruppo principale, assegnandogli al contempo i diritti di lettura e -scrittura.\footnote{oggi queste operazioni, insieme ad altre relative alla - contabilità ed alla tracciatura degli accessi, vengono gestite dalle - distribuzioni più recenti in una maniera generica appoggiandosi a servizi di - sistema come \textit{ConsoleKit}, ma il concetto generale resta - sostanzialmente lo stesso.} Inoltre il programma provvede a costruire gli -opportuni valori per le variabili di ambiente, come \envvar{HOME}, -\envvar{SHELL}, ecc. Infine attraverso l'uso di \func{setuid}, \func{setgid} -e \func{initgroups} verrà cambiata l'identità del proprietario del processo, -infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo invocato tali -funzioni con i privilegi di amministratore, tutti gli \ids{UID} ed i \ids{GID} -(reali, effettivi e salvati) saranno impostati a quelli dell'utente. +impostare come directory di lavoro la \textit{home directory} dell'utente, +cambia i diritti di accesso al terminale (con \func{chown} e \func{chmod}) per +assegnarne la titolarità all'utente ed al suo gruppo principale, assegnandogli +al contempo i diritti di lettura e scrittura.\footnote{oggi queste operazioni, + insieme ad altre relative alla contabilità ed alla tracciatura degli + accessi, vengono gestite dalle distribuzioni più recenti in una maniera + generica appoggiandosi a servizi di sistema come \textit{ConsoleKit}, ma il + concetto generale resta sostanzialmente lo stesso.} Inoltre il programma +provvede a costruire gli opportuni valori per le variabili di ambiente, come +\envvar{HOME}, \envvar{SHELL}, ecc. Infine attraverso l'uso di \func{setuid}, +\func{setgid} e \func{initgroups} verrà cambiata l'identità del proprietario +del processo, infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo +invocato tali funzioni con i privilegi di amministratore, tutti gli \ids{UID} +ed i \ids{GID} (reali, effettivi e salvati) saranno impostati a quelli +dell'utente. A questo punto \cmd{login} provvederà (fatte salve eventuali altre azioni iniziali, come la stampa di messaggi di benvenuto o il controllo della posta) @@ -725,10 +720,10 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni: \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. @@ -738,14 +733,14 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni: eseguendo una ulteriore \func{fork} uscendo nel padre e proseguendo nel figlio. In questo caso, non essendo più quest'ultimo un leader di sessione non potrà ottenere automaticamente un terminale di controllo. -\item Eseguire una \func{chdir} per impostare la \index{directory~di~lavoro} - directory di lavoro del processo (su \file{/} o su una directory che - contenga dei file necessari per il programma), per evitare che la directory - da cui si è lanciato il processo resti in uso e non sia possibile rimuoverla - o smontare il filesystem che la contiene. -\item Impostare la \itindex{umask} maschera dei permessi (di solito con - \code{umask(0)}) in modo da non essere dipendenti dal valore ereditato da - chi ha lanciato originariamente il processo. +\item Eseguire una \func{chdir} per impostare la directory di lavoro del + processo (su \file{/} o su una directory che contenga dei file necessari per + il programma), per evitare che la directory da cui si è lanciato il processo + resti in uso e non sia possibile rimuoverla o smontare il filesystem che la + contiene. +\item Impostare la maschera dei permessi (di solito con \code{umask(0)}) in + modo da non essere dipendenti dal valore ereditato da chi ha lanciato + originariamente il processo. \item Chiudere tutti i file aperti che non servono più (in generale tutti); in particolare vanno chiusi i file standard che di norma sono ancora associati al terminale (un'altra opzione è quella di redirigerli verso @@ -754,7 +749,7 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni: In Linux buona parte di queste azioni possono venire eseguite invocando la -funzione \funcd{daemon} (fornita dalle \acr{glibc}), introdotta per la prima +funzione \funcd{daemon} (fornita dalla \acr{glibc}), introdotta per la prima volta in BSD4.4; il suo prototipo è: \begin{funcproto}{ @@ -772,10 +767,9 @@ La funzione esegue una \func{fork}, per uscire subito, con \func{\_exit}, nel padre, mentre l'esecuzione prosegue nel figlio che esegue subito una \func{setsid}. In questo modo si compiono automaticamente i passi 1 e 2 della precedente lista. Se \param{nochdir} è nullo la funzione imposta anche la -\index{directory~di~lavoro} directory di lavoro su \file{/}, -se \param{noclose} è nullo i file standard vengono rediretti su -\file{/dev/null} (corrispondenti ai passi 4 e 6); in caso di valori non nulli -non viene eseguita nessuna altra azione. +directory di lavoro su \file{/}, se \param{noclose} è nullo i file standard +vengono rediretti su \file{/dev/null} (corrispondenti ai passi 4 e 6); in caso +di valori non nulli non viene eseguita nessuna altra azione. Dato che un programma demone non può più accedere al terminale, si pone il problema di come fare per la notifica di eventuali errori, non potendosi più @@ -831,7 +825,7 @@ demone che si usa, per la gestione del quale si rimanda ad un testo di amministrazione di sistema.\footnote{l'argomento è ad esempio coperto dal capitolo 3.2.3 si \cite{AGL}.} -Le \acr{glibc} definiscono una serie di funzioni standard con cui un processo +La \acr{glibc} definisce una serie di funzioni standard con cui un processo può accedere in maniera generica al servizio di \textit{syslog}, che però funzionano solo localmente; se si vogliono inviare i messaggi ad un altro sistema occorre farlo esplicitamente con un socket UDP, o utilizzare le @@ -875,25 +869,25 @@ specificato con un OR aritmetico. \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} @@ -915,18 +909,19 @@ tab.~\ref{tab:sess_openlog_option}. \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}.} @@ -965,15 +960,15 @@ forniti secondo quanto richiesto da \param{format}. \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 @@ -988,7 +983,7 @@ preimpostata con \func{openlog}. La priorità è indicata con un valore numerico specificabile attraverso le costanti riportate in tab.~\ref{tab:sess_syslog_priority}. -Le \acr{glibc}, seguendo POSIX.1-2001, prevedono otto diverse priorità +La \acr{glibc}, seguendo POSIX.1-2001, prevede otto diverse priorità ordinate da 0 a 7, in ordine di importanza decrescente; questo comporta che i tre bit meno significativi dell'argomento \param{priority} sono occupati da questo valore, mentre i restanti bit più significativi vengono usati per @@ -1012,8 +1007,8 @@ funzione è originaria di BSD e per utilizzarla deve essere definito La sola differenza con \func{syslog} è quella di prendere invece di una lista di argomenti esplicita un unico argomento finale passato nella forma di una \macro{va\_list}; la funzione risulta utile qualora si ottengano gli argomenti -dalla invocazione di un'altra funzione \index{funzioni!variadic} -\textit{variadic} (si rammenti quanto visto in sez.~\ref{sec:proc_variadic}). +dalla invocazione di un'altra funzione \textit{variadic} (si ricordi quanto +visto in sez.~\ref{sec:proc_variadic}). Per semplificare la gestione della scelta del livello di priorità a partire dal quale si vogliono registrare i messaggi, le funzioni di gestione @@ -1045,9 +1040,9 @@ valore non nullo per \param{mask} la registrazione dei messaggi viene 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 @@ -1113,7 +1108,7 @@ come \textit{console} di sistema,\footnote{quello che viene indicato con il 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, @@ -1129,9 +1124,9 @@ default.\footnote{anch'esso viene usato nelle operazioni di controllo per Per la lettura dei messaggi del kernel e la gestione del relativo buffer circolare esiste una apposita \textit{system call} chiamata anch'essa \texttt{syslog}, ma dato il conflitto di nomi questa viene rimappata su - un'altra funzione di libreria, in particolare nelle \acr{glibc} essa viene - invocata tramite la funzione \funcd{klogctl},\footnote{nelle \acr{libc4} e - nelle \acr{libc5} la funzione invece era \code{SYS\_klog}.} il cui prototipo + un'altra funzione di libreria, in particolare nella \acr{glibc} essa viene + invocata tramite la funzione \funcd{klogctl},\footnote{nella \acr{libc4} e + nella \acr{libc5} la funzione invece era \code{SYS\_klog}.} il cui prototipo è: \begin{funcproto}{ @@ -1453,9 +1448,9 @@ associato ad un file descriptor; il suo prototipo è: La funzione restituisce il puntatore alla stringa contenente il nome del file di dispositivo del terminale associato a \param{fd}, che però è allocata staticamente e può essere sovrascritta da successive chiamate. Per questo -della funzione esiste anche una versione \index{funzioni!rientranti} -rientrante, \funcd{ttyname\_r}, che non presenta il problema dell'uso di una -zona di memoria statica; il suo prototipo è: +della funzione esiste anche una versione rientrante, \funcd{ttyname\_r}, che +non presenta il problema dell'uso di una zona di memoria statica; il suo +prototipo è: \begin{funcproto}{ \fhead{unistd.h} @@ -1479,9 +1474,8 @@ essere allocata in precedenza, e la relativa dimensione, \param{len}. Se la stringa che deve essere restituita, compreso lo zero di terminazione finale, eccede questa dimensione si avrà un errore. -Una funzione funzione analoga alle precedenti prevista da POSIX.1, che -restituisce il nome di un file di dispositivo, è \funcd{ctermid}, il cui -prototipo è: +Una funzione analoga alle precedenti prevista da POSIX.1, che restituisce il +nome di un file di dispositivo, è \funcd{ctermid}, il cui prototipo è: \begin{funcproto}{ \fhead{stdio.h} @@ -1490,8 +1484,8 @@ prototipo è: } {La funzione ritorna il puntatore alla stringa contenente il \textit{pathname} - del terminale o \val{NULL} se non non riesce ad eseguire l'operazione, non - sono previsti errori.} + del terminale o \val{NULL} se non riesce ad eseguire l'operazione, non sono + previsti errori.} \end{funcproto} La funzione restituisce un puntatore al \textit{pathname} del file di @@ -1500,7 +1494,7 @@ come argomento \val{NULL} la funzione restituisce il puntatore ad una stringa 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 @@ -1539,7 +1533,7 @@ ne aggiungono degli altri per mantenere ulteriori informazioni.\footnote{la I primi quattro campi sono quattro flag che controllano il comportamento del terminale; essi sono realizzati come maschera binaria, pertanto il tipo -\type{tcflag\_t} è di norma realizzato con un intero senza segno di lunghezza +\typed{tcflag\_t} è di norma realizzato con un intero senza segno di lunghezza opportuna. I valori devono essere specificati bit per bit, avendo cura di non modificare i bit su cui non si interviene. @@ -1551,74 +1545,74 @@ modificare i bit su cui non si interviene. \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 @@ -1656,44 +1650,44 @@ quelli ancora assenti sono stati indicati esplicitamente. \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 @@ -1730,61 +1724,61 @@ il valore. \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 @@ -1822,72 +1816,72 @@ due campi aggiuntivi, \var{c\_ispeed} e \var{c\_ospeed}, nella struttura \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 @@ -1915,7 +1909,7 @@ non è impostato \const{ICANON}. 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.} @@ -1928,71 +1922,71 @@ altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri \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} @@ -2087,11 +2081,11 @@ utili qualora si cambino i parametri di output. \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 @@ -2185,9 +2179,9 @@ velocità prescelta \param{speed} all'interno della struttura puntata da chiamare \func{tcsetattr}. Si tenga presente che per le linee seriali solo alcuni valori di velocità sono -validi; questi possono essere specificati direttamente (le \acr{glibc} -prevedono che i valori siano indicati in bit per secondo), ma in generale -altre versioni di librerie possono utilizzare dei valori diversi. Per questo +validi; questi possono essere specificati direttamente (la \acr{glibc} +prevede che i valori siano indicati in bit per secondo), ma in generale +altre versioni di libreria possono utilizzare dei valori diversi. Per questo POSIX.1 prevede una serie di costanti che però servono solo per specificare le velocità tipiche delle linee seriali: \begin{verbatim} @@ -2206,7 +2200,7 @@ la velocità della linea di trasmissione; se questa non corrisponde a quella del terminale quest'ultimo non potrà funzionare: quando il terminale non è seriale il valore non influisce sulla velocità di trasmissione dei dati. -In generale impostare un valore nullo (\val{B0}) sulla linea di output fa si +In generale impostare un valore nullo (\val{B0}) sulla linea di output fa sì che il modem non asserisca più le linee di controllo, interrompendo di fatto la connessione, qualora invece si utilizzi questo valore per la linea di input l'effetto sarà quello di rendere la sua velocità identica a quella della linea @@ -2372,9 +2366,9 @@ di uscita cancellerà i dati scritti ma non ancora trasmessi. \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 @@ -2412,12 +2406,12 @@ riportati in tab.~\ref{tab:sess_tcflow_action}. \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 @@ -2495,6 +2489,7 @@ Da fare. Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia. % vedi man pts +% vedi \subsection{Allocazione dei terminali virtuali} @@ -2505,6 +2500,8 @@ Qui vanno le cose su \func{openpty} e compagnia. % TODO le ioctl dei terminali (man tty_ioctl) % e http://www.net-security.org/article.php?id=83 % TODO trattare \func{posix\_openpt} +% vedi http://lwn.net/Articles/688809/, +% http://man7.org/linux/man-pages/man3/ptsname.3.html % TODO materiale sulle seriali