X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=b3ce7d0ecc05abef9243b527feac7f2f2fcb5ba4;hp=4118000e6f7018f49922d5c28cf0f297511eebbe;hb=9a6d19e384fe9b1afbe4d9124ac34eaf7aa57562;hpb=c474f4307db945bc45287edd0ea4c2c29374d0ee diff --git a/session.tex b/session.tex index 4118000..b3ce7d0 100644 --- a/session.tex +++ b/session.tex @@ -1,9 +1,9 @@ %% session.tex %% -%% Copyright (C) 2000-2004 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2005 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 "Prefazione", +%% Free Software Foundation; with the Invariant Sections being "Un preambolo", %% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the %% license is included in the section entitled "GNU Free Documentation %% License". @@ -60,11 +60,11 @@ sez.~\ref{sec:sess_login}). Siccome la shell è collegata ad un solo terminale, che viene usualmente chiamato \textsl{terminale di controllo}, (vedi sez.~\ref{sec:sess_ctrl_term}) -un solo comando alla volta (quello che viene detto in \textit{foreground}), -potrà scrivere e leggere dal terminale. La shell però può eseguire anche più -comandi in contemporanea, mandandoli in \textit{background} (aggiungendo una -\cmd{\&} alla fine del comando), nel qual caso essi saranno eseguiti senza -essere collegati al terminale. +un solo comando alla volta (quello che viene detto in \textit{foreground} o in +\textsl{primo piano}), potrà scrivere e leggere dal terminale. La shell però +può eseguire, aggiungendo una \cmd{\&} alla fine del comando, più programmi in +contemporanea, mandandoli in \textit{background} (o \textsl{sullo sfondo}), +nel qual caso essi saranno eseguiti senza essere collegati al terminale. Si noti come si sia parlato di comandi e non di programmi o processi; fra le funzionalità della shell infatti c'è anche quella di consentire di concatenare @@ -235,7 +235,7 @@ s 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 race -condition\index{race condition}. +condition\index{\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 @@ -292,7 +292,7 @@ dal quale ricevono gli eventuali segnali da tastiera. A tale scopo lo standard POSIX.1 prevede che ad ogni sessione possa essere 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 +di controllo.\footnote{Lo standard POSIX.1 non specifica nulla riguardo l'implementazione; in Linux anch'esso viene mantenuto nella solita struttura \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 @@ -358,7 +358,7 @@ condizioni di errore.\footnote{la shell in genere notifica comunque un \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}. -Un processo può controllare qual'è il gruppo di \textit{foreground} associato +Un processo può controllare qual è il gruppo di \textit{foreground} associato ad un terminale con la funzione \funcd{tcgetpgrp}, il cui prototipo è: \begin{functions} \headdecl{unistd.h} \headdecl{termios.h} @@ -549,7 +549,7 @@ o se la password non corrisponde\footnote{il confronto non viene effettuato volta criptato, ed è il risultato che viene confrontato con il valore che viene mantenuto nel database degli utenti.} la richiesta viene ripetuta un certo numero di volte dopo di che \cmd{login} esce ed \cmd{init} provvede a -rilanciare un'altra istanza di \func{getty}. +rilanciare un'altra istanza di \cmd{getty}. Se invece la password corrisponde \cmd{login} esegue \func{chdir} per settare la \textit{home directory} dell'utente, cambia i diritti di accesso al @@ -557,7 +557,7 @@ 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. Inoltre il programma provvede a costruire gli opportuni valori per le variabili di ambiente, come \texttt{HOME}, \texttt{SHELL}, ecc. -Infine attraverso l'uso di \func{setuid}, \func{setpid} e \func{initgroups} +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 user-ID ed i group-ID (reali, effettivi @@ -964,7 +964,7 @@ bufferizzazione\footnote{completamente indipendente dalla eventuale ulteriore kernel. \begin{figure}[htb] - \centering \includegraphics[width=13cm]{img/term_struct} + \centering \includegraphics[width=14.5cm]{img/term_struct} \caption{Struttura interna generica di un driver per un terminale.} \label{fig:term_struct} \end{figure} @@ -980,7 +980,7 @@ massime vengono persi; in alcuni casi il driver provvede ad inviare automaticamente un avviso (un carattere di BELL, che provoca un beep) sull'output quando si eccedono le dimensioni della coda. Se è abilitato il modo canonico i caratteri in ingresso restano nella coda fintanto che non -viene ricevuto un a capo; un'altra parametro del sistema, \const{MAX\_CANON}, +viene ricevuto un a capo; un'altro parametro del sistema, \const{MAX\_CANON}, specifica la dimensione massima di una riga in modo canonico. La coda di uscita è analoga a quella di ingresso e contiene i caratteri @@ -1035,13 +1035,13 @@ prototipo Restituisce il nome del terminale di controllo del processo. \bodydesc{La funzione restituisce il puntatore alla stringa contenente il - pathname del terminale.} + \textit{pathname} del terminale.} \end{prototype} -La funzione scrive il pathname del terminale di controllo del processo -chiamante nella stringa posta all'indirizzo specificato dall'argomento -\param{s}. La memoria per contenere la stringa deve essere stata allocata in -precedenza ed essere lunga almeno +La funzione scrive il \index{\textit{pathname}}\textit{pathname} del terminale +di controllo del processo chiamante nella stringa posta all'indirizzo +specificato dall'argomento \param{s}. La memoria per contenere la stringa +deve essere stata allocata in precedenza ed essere lunga almeno \const{L\_ctermid}\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 @@ -1070,11 +1070,12 @@ ovviamente essere stata allocata in precedenza), e la relativa dimensione, \param{len}; se la stringa che deve essere restituita eccede questa dimensione si avrà una condizione di errore. -Se si passa come argomento \val{NULL} la funzione restituisce il puntatore -ad una stringa statica che può essere sovrascritta da chiamate successive. Si -tenga presente che il pathname restituito potrebbe non identificare -univocamente il terminale (ad esempio potrebbe essere \file{/dev/tty}), -inoltre non è detto che il processo possa effettivamente aprire il terminale. +Se si passa come argomento \val{NULL} la funzione restituisce il puntatore ad +una stringa statica che può essere sovrascritta da chiamate successive. Si +tenga presente che il \index{\textit{pathname}}\textit{pathname} restituito +potrebbe non identificare 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 \struct{termios}, (la cui definizione è riportata in @@ -1765,7 +1766,7 @@ lette da una struttura \struct{termios} utilizzando altre due funzioni, Anche in questo caso le due funzioni estraggono i valori della velocità della linea da una struttura, il cui indirizzo è specificato dall'argomento \param{termios\_p} che deve essere stata letta in precedenza con -\func{tcgetaddr}. +\func{tcgetattr}. @@ -1785,7 +1786,7 @@ vengono considerate, dal punto di vista dell'accesso al terminale, come delle funzioni di scrittura, pertanto se usate da processi in background sul loro terminale di controllo provocano l'emissione di \const{SIGTTOU} come illustrato in sez.~\ref{sec:sess_ctrl_term}.\footnote{con la stessa eccezione, - già vista per \func{tcsetaddr}, che quest'ultimo sia bloccato o ignorato dal + già vista per \func{tcsetattr}, che quest'ultimo sia bloccato o ignorato dal processo chiamante.} Una prima funzione, che è efficace solo in caso di terminali seriali asincroni