descriptor; il suo prototipo è:
\begin{prototype}{unistd.h}{char *ttyname(int desc)}
- Restituisce il nome di un terminale.
+ Restituisce il nome del terminale associato al file \param{desc}.
\bodydesc{La funzione restituisce il puntatore alla stringa contenente il
nome del terminale associato \param{desc} e \macro{NULL} in caso di
\macro{L\_ctermid}\footnote{\macro{L\_ctermid} è una delle varie costanti del
sistema, non trattata esplicitamente in \secref{sec:sys_characteristics} che
indica la dimensione che deve avere una stringa per poter contenere il nome
- di un terminale.} caratteri.
+ di un terminale.} caratteri.
+
+Esiste infine una versione rientrante \func{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{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[\macro{ERANGE}] la lunghezza del buffer, \param{len}, non è
+ sufficiente per contenere la stringa restituita.
+ \end{errlist}
+ ed inoltre \macro{EBADF} ed \macro{ENOSYS}.
+}
+\end{prototype}
+
+La funzione prende due argomenti, il puntatore alla zona di memoria
+\param{buff}, in cui l'utente vuole che il risultato venga scritto (dovrà
+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 \macro{NULL} la funzione restituisce il puntatore
ad una stringa statica che può essere sovrascritta da chiamate successive. Si
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 è in \figref{fig:term_termios}), usata
-dalle varie funzioni dell'interfaccia. In \figref{fig:term_termios} si sono
-riportati solo i campi previsti dallo standard POSIX.1, in genere le varie
-implementazioni ne aggiungono degli altri (in Linux e BSD ci sono quelli che
-specificano le velocità della linea) per mantenere ulteriori informazioni.
+\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
+ \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,
+ \var{c\_line} per ... (NdT, trovare a che serve}.}
\begin{figure}[!htb]
\footnotesize \centering
tcflag_t c_cflag; /* control modes */
tcflag_t c_lflag; /* local modes */
cc_t c_cc[NCCS]; /* control characters */
-};
+ cc_t c_line; /* line discipline */
+ speed_t c_ispeed; /* input speed */
+ speed_t c_ospeed; /* output speed */
+;
\end{lstlisting}
\end{minipage}
\normalsize
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} (non mostrati in
+\var{c\_ospeed}, nella struttura \var{termios} (mostrati in
\figref{fig:term_termios}).
\begin{table}[b!ht]
effettuano più cambiamenti è buona norma controllare con una ulteriore
chiamata a \func{tcgetattr} che essi siano stati eseguiti tutti quanti.
-\begin{figure}[!bht]
+\begin{figure}[!htb]
\footnotesize
\begin{lstlisting}{}%
#include <unistd.h>
\subsection{Il \textsl{modo canonico} ed il \textsl{modo non canonico}}
\label{sec:term_terminal_modes}
-Il modo non canonico
-
+
+
%%% Local Variables:
%%% mode: latex