X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=ee8b2d8ec9c3f5765213f648a0bf4579f8f3d727;hp=6ab950879139b5f623c7196721da228a947a7b5e;hb=ff2d0141751ed62ef56e5bfd226c589311b8b669;hpb=46029a05c9009df38022e82b0f20732290388ef1 diff --git a/session.tex b/session.tex index 6ab9508..ee8b2d8 100644 --- a/session.tex +++ b/session.tex @@ -115,7 +115,7 @@ processi vengono raggruppati in \textit{process group} e \textit{sessioni}; per far questo vengono utilizzati due ulteriori identificatori (oltre quelli visti in \secref{sec:proc_pid}) che il kernel associa a ciascun processo:\footnote{in Linux questi identificatori sono mantenuti nei campi - \var{pgrp} e \var{session} della struttura \var{task\_struct} definita in + \var{pgrp} e \var{session} della struttura \struct{task\_struct} definita in \file{sched.h}.} l'identificatore del \textit{process group} e l'identificatore della \textsl{sessione}, che vengono indicati rispettivamente con le sigle \acr{pgid} e \acr{sid}, e sono mantenuti in variabili di tipo @@ -221,10 +221,11 @@ Inoltre la funzione pu dei suoi figli, ed in quest'ultimo caso ha successo soltanto se questo non ha ancora eseguito una \func{exec}.\footnote{questa caratteristica è implementata dal kernel che mantiene allo scopo un altro campo, \var{did\_exec}, in - \var{task\_struct}.} Specificando un valore nullo per \param{pid} si indica -il processo corrente, mentre specificando un valore nullo per \param{pgid} si -imposta il \textit{process group} al valore del \acr{pid} del processo -selezionato; pertanto \func{setpgrp} è equivalente a \code{setpgid(0, 0)}. + \struct{task\_struct}.} Specificando un valore nullo per \param{pid} si +indica il processo corrente, mentre specificando un valore nullo per +\param{pgid} si imposta il \textit{process group} al valore del \acr{pid} del +processo selezionato; pertanto \func{setpgrp} è equivalente a \code{setpgid(0, + 0)}. Di norma questa funzione viene usata dalla shell quando si usano delle pipeline, per mettere nello stesso process group tutti i programmi lanciati su @@ -253,10 +254,10 @@ valore del suo \acr{pid}, creando cos \textit{process group} di cui esso diventa leader (come per i \textit{process group} un processo si dice leader di sessione\footnote{in Linux la proprietà è mantenuta in maniera indipendente con un apposito campo \var{leader} in - \var{task\_struct}.} se il suo \acr{sid} è uguale al suo \acr{pid}) ed unico -componente. Inoltre la funzione distacca il processo da ogni terminale di -controllo (torneremo sull'argomento in \secref{sec:sess_ctrl_term}) cui fosse -in precedenza associato. + \struct{task\_struct}.} se il suo \acr{sid} è uguale al suo \acr{pid}) ed +unico componente. Inoltre la funzione distacca il processo da ogni terminale +di controllo (torneremo sull'argomento in \secref{sec:sess_ctrl_term}) cui +fosse in precedenza associato. 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} @@ -292,8 +293,8 @@ associato un terminale di controllo; in Linux questo viene realizzato mantenendo fra gli attributi di ciascun processo anche qual'è il suo terminale di controllo. \footnote{Lo standard POSIX.1 non specifica nulla riguardo l'implementazione; in Linux anch'esso viene mantenuto nella solita struttura - \var{task\_struct}, nel campo \var{tty}.} In generale ogni processo eredita -dal padre, insieme al \acr{pgid} e al \acr{sid} anche il terminale di + \struct{task\_struct}, nel campo \var{tty}.} In generale ogni processo +eredita dal padre, insieme al \acr{pgid} e al \acr{sid} anche il terminale di controllo (vedi \secref{sec:proc_fork}). In questo modo tutti processi originati dallo stesso leader di sessione mantengono lo stesso terminale di controllo. @@ -1076,12 +1077,12 @@ univocamente il terminale (ad esempio potrebbe essere \file{/dev/tty}), inoltre non è detto che il processo possa effettivamente aprire il terminale. I vari attributi vengono mantenuti per ciascun terminale in una struttura -\var{termios}, (la cui definizione è riportata in \figref{fig:term_termios}), -usata dalle varie funzioni dell'interfaccia. In \figref{fig:term_termios} si -sono riportati tutti i campi della definizione usata in Linux; di questi solo -i primi cinque sono previsti dallo standard POSIX.1, ma le varie -implementazioni ne aggiungono degli altri per mantenere ulteriori -informazioni.\footnote{la definizione della struttura si trova in +\struct{termios}, (la cui definizione è riportata in +\figref{fig:term_termios}), usata dalle varie funzioni dell'interfaccia. In +\figref{fig:term_termios} si sono riportati tutti i campi della definizione +usata in Linux; di questi solo i primi cinque sono previsti dallo standard +POSIX.1, ma le varie implementazioni ne aggiungono degli altri per mantenere +ulteriori informazioni.\footnote{la definizione della struttura si trova in \file{bits/termios.h}, da non includere mai direttamente, Linux, seguendo l'esempio di BSD, aggiunge i due campi \var{c\_ispeed} e \var{c\_ospeed} per mantenere le velocità delle linee seriali, ed un campo ulteriore, @@ -1104,7 +1105,7 @@ struct termios { \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \var{termios}, che identifica le proprietà di un + \caption{La struttura \structd{termios}, che identifica le proprietà di un terminale.} \label{fig:term_termios} \end{figure} @@ -1336,13 +1337,13 @@ valore. \const{CBAUD} & Maschera dei bit (4+1) usati per impostare della velocità della linea (il \textit{baud rate}) in ingresso. In Linux non è implementato in quanto viene - usato un apposito campo di \var{termios}.\\ + usato un apposito campo di \struct{termios}.\\ \const{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della linea, per le stesse motivazioni del precedente non è implementato in Linux.\\ \const{CIBAUD} & Maschera dei bit della velocità della linea in ingresso. Analogo a \const{CBAUD}, anch'esso in Linux è - mantenuto in un apposito campo di \var{termios}. \\ + mantenuto in un apposito campo di \struct{termios}. \\ \const{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale, attraverso l'utilizzo delle dei due fili di RTS e CTS.\\ \hline @@ -1370,7 +1371,7 @@ standard POSIX non specifica nulla riguardo l'implementazione, ma solo delle funzioni di lettura e scrittura) che mantengono le velocità delle linee seriali all'interno dei flag; come accennato in Linux questo viene fatto (seguendo l'esempio di BSD) attraverso due campi aggiuntivi, \var{c\_ispeed} e -\var{c\_ospeed}, nella struttura \var{termios} (mostrati in +\var{c\_ospeed}, nella struttura \struct{termios} (mostrati in \figref{fig:term_termios}). \begin{table}[b!ht] @@ -1467,10 +1468,10 @@ avviene solo in modo canonico, pertanto questi flag non hanno significato se non è impostato \const{ICANON}. Oltre ai vari flag per gestire le varie caratteristiche dei terminali, -\var{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}, POSIX ne -specifica almeno 11, ma molte implementazioni ne definiscono molti +\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}, +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.} @@ -1540,7 +1541,7 @@ altri.\footnote{in Linux il valore della costante \hline \end{tabular} \caption{Valori dei caratteri di controllo mantenuti nel campo \var{c\_cc} - della struttura \var{termios}.} + della struttura \struct{termios}.} \label{tab:sess_termios_cc} \end{table} @@ -1569,8 +1570,8 @@ vengono interpretati e non sono passati sulla coda di ingresso. Per leggere ed scrivere tutte le impostazioni dei terminali lo standard POSIX prevede due funzioni, \func{tcgetattr} e \func{tcsetattr}; entrambe utilizzano -come argomento un puntatore ad struttura \var{termios} che sarà quella in cui -andranno immagazzinate le impostazioni, il loro prototipo è: +come argomento un puntatore ad struttura \struct{termios} che sarà quella in +cui andranno immagazzinate le impostazioni, il loro prototipo è: \begin{functions} \headdecl{unistd.h} \headdecl{termios.h} @@ -1733,11 +1734,11 @@ negato. Al contrario di tutte le altre caratteristiche dei terminali, che possono essere impostate esplicitamente utilizzando gli opportuni campi di -\var{termios}, per le velocità della linea (il cosiddetto \textit{baud rate}) -non è prevista una implementazione standardizzata, per cui anche se in Linux -sono mantenute in due campi dedicati nella struttura, questi non devono essere -acceduti direttamente ma solo attraverso le apposite funzioni di interfaccia -provviste da POSIX.1. +\struct{termios}, per le velocità della linea (il cosiddetto \textit{baud + rate}) non è prevista una implementazione standardizzata, per cui anche se +in Linux sono mantenute in due campi dedicati nella struttura, questi non +devono essere acceduti direttamente ma solo attraverso le apposite funzioni di +interfaccia provviste da POSIX.1. Lo standard prevede due funzioni per scrivere la velocità delle linee seriali, \func{cfsetispeed} per la velocità della linea di ingresso e @@ -1758,9 +1759,9 @@ sono: \end{functions} Si noti che le funzioni si limitano a scrivere opportunamente il valore della -velocità prescelta \var{speed} all'interno della struttura puntata da -\var{termios\_p}; per effettuare l'impostazione effettiva occorrerà poi -chiamare \func{tcsetattr}. +velocità prescelta \param{speed} all'interno della struttura puntata da +\param{termios\_p}; per effettuare l'impostazione effettiva occorrerà poi +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} @@ -1792,8 +1793,8 @@ l'effetto sar di output. Analogamente a quanto avviene per l'impostazione, le velocità possono essere -lette da una struttura \var{termios} utilizzando altre due funzioni, -\func{cfgetispeed} e \func{cfgetospeed}, i cui prototipi sono: +lette da una struttura \struct{termios} utilizzando altre due funzioni, +\funcd{cfgetispeed} e \funcd{cfgetospeed}, i cui prototipi sono: \begin{functions} \headdecl{unistd.h} \headdecl{termios.h}