%% session.tex
%%
-%% Copyright (C) 2000-2007 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2010 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",
funzionalità della shell infatti c'è anche quella di consentire di concatenare
più programmi in una sola riga di comando con le pipe, ed in tal caso verranno
eseguiti più programmi, inoltre, anche quando si invoca un singolo programma,
-questo potrà sempre lanciare sottoprocessi per eseguire dei compiti specifici.
+questo potrà sempre lanciare sotto-processi per eseguire dei compiti specifici.
Per questo l'esecuzione di un comando può originare più di un processo; quindi
nella gestione del job control non si può far riferimento ai singoli processi.
caso di successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà
i valori:
\begin{errlist}
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] In alcune implementazioni viene restituito quando il
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] in alcune implementazioni viene restituito quando il
processo selezionato non fa parte della stessa sessione del processo
corrente.
\end{errlist}
\bodydesc{La funzione ritorna il valore del nuovo \textit{process group}, e
-1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] Il cambiamento non è consentito.
- \item[\errcode{EACCES}] Il processo ha già eseguito una \func{exec}.
- \item[\errcode{EINVAL}] Il valore di \param{pgid} è negativo.
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] il cambiamento non è consentito.
+ \item[\errcode{EACCES}] il processo ha già eseguito una \func{exec}.
+ \item[\errcode{EINVAL}] il valore di \param{pgid} è negativo.
\end{errlist}
}
\end{prototype}
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
\bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTTY}] Il file \param{fd} non corrisponde al terminale di
+ \item[\errcode{ENOTTY}] il file \param{fd} non corrisponde al terminale di
controllo del processo chiamante.
- \item[\errcode{ENOSYS}] Il sistema non supporta il job control.
- \item[\errcode{EPERM}] Il \textit{process group} specificato non è nella
+ \item[\errcode{ENOSYS}] il sistema non supporta il job control.
+ \item[\errcode{EPERM}] il \textit{process group} specificato non è nella
stessa sessione del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{EINVAL}.
gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso
\var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTTY}] Non c'è un terminale di controllo o \param{fd} non
+ \item[\errcode{ENOTTY}] non c'è un terminale di controllo o \param{fd} non
corrisponde al terminale di controllo del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
distribuzione \textit{Slackware}, come alcune distribuzioni su dischetto, ed
altre distribuzioni dedicate a compiti limitati e specifici.} viene usata
la procedura di avvio di System V; questa prevede che \cmd{init} legga dal
-file di configurazione \file{/etc/inittab} quali programmi devono essere
+file di configurazione \conffile{/etc/inittab} quali programmi devono essere
lanciati, ed in quali modalità, a seconda del cosiddetto \textit{run level},
anch'esso definito nello stesso file.
tutto ripetuto per ciascuno dei terminali che si hanno a disposizione (o per
un certo numero di essi, nel caso delle console virtuali), secondo quanto
indicato dall'amministratore nel file di configurazione del programma,
-\file{/etc/inittab}.
+\conffile{/etc/inittab}.
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
Questi programmi, che devono essere eseguiti in modalità non interattiva e
senza nessun intervento dell'utente, sono normalmente chiamati
\textsl{demoni}, (o \textit{daemons}), nome ispirato dagli omonimi spiritelli
-che svolgevano compiti vari, di cui parlava Socrate (che sosteneva di averne
-uno al suo servizio).\footnote{NdT. ricontrollare, i miei ricordi di filosofia
- sono piuttosto datati.}
+della mitologia greca che svolgevano compiti che gli dei trovavano noiosi, di
+cui parla anche Socrate (che sosteneva di averne uno al suo servizio).
+
+%TODO ricontrollare, i miei ricordi di filosofia sono piuttosto datati.
Se però si lancia un programma demone dalla riga di comando in un sistema che
supporta, come Linux, il \textit{job control} esso verrà comunque associato ad
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 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 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
\item scartare.
\end{itemize*}
secondo le modalità che questo preferisce e che possono essere impostate
-attraverso il file di configurazione \file{/etc/syslog.conf} (maggiori
+attraverso il file di configurazione \conffile{/etc/syslog.conf} (maggiori
dettagli si possono trovare sulle pagine di manuale per questo file e per
\cmd{syslogd}).
che indica la dimensione che deve avere una stringa per poter contenere il
nome di un terminale.} caratteri.
-Esiste infine una versione rientrante \funcd{ttyname\_r} della funzione
-\func{ttyname}, che non presenta il problema dell'uso di una zona di memoria
-statica; il suo prototipo è:
+Esiste infine una versione \index{funzioni!rientranti} rientrante
+\funcd{ttyname\_r} della funzione \func{ttyname}, che non presenta il problema
+dell'uso di una zona di memoria statica; il suo prototipo è:
\begin{prototype}{unistd.h}{int ttyname\_r(int desc, char *buff, size\_t len)}
Restituisce il nome del terminale associato al file \param{desc}.
\bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINTR}] La funzione è stata interrotta.
+ \item[\errcode{EINTR}] la funzione è stata interrotta.
\end{errlist}
ed inoltre \errval{EBADF}, \errval{ENOTTY} ed \errval{EINVAL}.
}
di code di ingresso ed uscita; in generale si fa riferimento ad esse con il
nome di \textsl{discipline di linea}.
-
Lo standard POSIX prevede alcune funzioni che permettono di intervenire
direttamente sulla gestione di quest'ultime e sull'interazione fra i dati in
ingresso ed uscita e le relative code. In generale tutte queste funzioni
sul terminale associato a \param{fd}; un valore nullo di \param{duration}
implica una durata del flusso fra 0.25 e 0.5 secondi, un valore diverso da
zero implica una durata pari a \code{duration*T} dove \code{T} è un valore
-compreso fra 0.25 e 0.5.\footnote{POSIX specifica il comportamento solo nel
- caso si sia impostato un valore nullo per \param{duration}; il comportamento
- negli altri casi può dipendere dalla implementazione.}
+compreso fra 0.25 e 0.5.\footnote{lo standard POSIX specifica il comportamento
+ solo nel caso si sia impostato un valore nullo per \param{duration}; il
+ comportamento negli altri casi può dipendere dalla implementazione.}
Le altre funzioni previste da POSIX servono a controllare il comportamento
dell'interazione fra le code associate al terminale e l'utente; la prima è
\end{table}
+
\subsection{Operare in \textsl{modo non canonico}}
\label{sec:term_non_canonical}
\label{sec:sess_pty}
Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia.
+% vedi man pts
+
-\subsection{La funzione \func{openpty}}
+\subsection{Allocazione dei terminale virtuali}
\label{sec:sess_openpty}
Qui vanno le cose su \func{openpty} e compagnia.
-
% TODO le ioctl dei terminali
+% TODO trattare \func{posix\_openpt}
+
+
+
+% TODO materiale sulle seriali
+% vedi http://www.easysw.com/~mike/serial/serial.html
+% TODO materiale generico sul layer TTY
+% vedi http://www.linusakesson.net/programming/tty/index.php
% LocalWords: kernel multitasking dell'I job control BSD POSIX shell sez group