+che pertanto possono essere sovrascritti da successive chiamate. Una funzione
+funzione analoga, anch'essa prevista da POSIX.1, è \func{ctermid}, il cui
+prototipo è:
+\begin{prototype}{stdio.h}{char *ctermid(char *s)}
+
+ Restituisce il nome del terminale di controllo del processo.
+
+ \bodydesc{La funzione restituisce il puntatore alla stringa contenente il
+ 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
+\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.
+
+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
+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.