\func{printf} usata in user space; una trattazione eccellente dell'argomento
si trova in \cite{LinDevDri}, nel quarto capitolo.}
-Il servizio permette poi di trattare i vari messaggi classificandoli secondo
-due indici, una \textit{facility}, che indica quale categoria di demone ha
-emesso il messaggio, e permette di classificarli per sottosistemi (kernel,
-posta elettronica, demoni di stampa, ecc.), ed una \textit{priority}, che
-identifica l'importanza del messaggio. Il sistema di \textit{syslog} provvede
-poi a riportare i messaggi all'amministratore in varie modalità come:
+Il servizio permette poi di trattare i vari messaggi classificandoli
+attraverso due indici; il primo, chiamato \textit{facility}, indica quale
+categoria di demone ha emesso il messaggio, ed è organizzato in sottosistemi
+(kernel, posta elettronica, demoni di stampa, ecc.), il secondo, chiamato
+\textit{priority}, identifica l'importanza del messaggio. Il sistema di
+\textit{syslog} provvede poi a riportare i messaggi all'amministratore
+attraverso differenti meccanismi come:
\begin{itemize*}
-\item scriverli sulla console.
-\item inviarli via mail ad uno specifico utente.
-\item scriverli su un file (comunemente detto \textit{log file}).
-\item inviarli ad un altro demone (anche via rete).
-\item scartarli.
+\item scrivere sulla console.
+\item inviare via mail ad uno specifico utente.
+\item scrivere su un file (comunemente detto \textit{log file}).
+\item inviare ad un altro demone (anche via rete).
+\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
-dettagli si possono trovare sulle relative pagine di manuale per questo file e
-per \cmd{syslogd}).
+dettagli si possono trovare sulle pagine di manuale per questo file e per
+\cmd{syslogd}).
Le \acr{glibc} definiscono una serie di funzioni standard con cui un processo
può accedere in maniera generica al servizio di syslog, che però funzionano
farlo esplicitamente con un socket UDP, o utilizzare le capacità di reinvio
del servizio.
-La prima funzione definita dall'interfaccia è \func{openlog}; essa in generale
-non è necessaria per l'uso del servizio, ma permette di impostare alcuni
-valori che controllano gli effetti delle chiamate successive; il suo prototipo
-è:
+La prima funzione definita dall'interfaccia è \func{openlog}, che apre una
+connessione al servizio di \textit{syslog}; essa in generale non è necessaria
+per l'uso del servizio, ma permette di impostare alcuni valori che controllano
+gli effetti delle chiamate successive; il suo prototipo è:
\begin{prototype}{syslog.h}{void openlog(const char *ident, int option,
int facility)}
La funzione permette di specificare, tramite \param{ident}, l'identità di chi
ha inviato il messaggio (di norma si passa il nome del programma, come
specificato da \code{argv[0]}); la stringa verrà preposta all'inizio di ogni
-messaggio. Il parametro \param{facility} permette invece di specificare una
-categoria per classificare i vari messaggi; i valori possibili sono riportati
-in \tabref{tab:sess_syslog_facility}.
-
+messaggio. Si tenga presente che il valore di \param{ident} che si passa alla
+funzione è un puntatore, se la stringa cui punta viene cambiata lo sarà pure
+nei successivi messaggi, e se viene cancellata i risultati potranno essere
+impredicibili, per questo è sempre opportuno usare una stringa costante. Il
+parametro \param{facility} permette invece di specificare l'omonimo indice per
+la categoria del messaggio; i valori possibili sono riportati in
+\tabref{tab:sess_syslog_facility}.
\begin{table}[htb]
\centering
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
-\macro{LOG\_AUTH} & \\
-\macro{LOG\_AUTHPRIV} & \\
-\macro{LOG\_CRON} & \\
-\macro{LOG\_DAEMON} & \\
-\macro{LOG\_FTP} & \\
-\macro{LOG\_KERN} & \\
-\macro{LOG\_LOCAL0} & \\
-...& \\
-\macro{LOG\_LOCAL7} & \\
-\macro{LOG\_LPR} & \\
-\macro{LOG\_MAIL} & \\
-\macro{LOG\_NEWS} & \\
-\macro{LOG\_SYSLOG} & \\
-\macro{LOG\_USER} & \\
-\macro{LOG\_UUCP} & \\
+\macro{LOG\_AUTH} & Messaggi relativi ad autenticazione e sicurezza,
+ obsoleto, è sostituito da \macro{LOG\_AUTHPRIV}. \\
+\macro{LOG\_AUTHPRIV} & Sostituisce \macro{LOG\_AUTH}.\\
+\macro{LOG\_CRON} & Messaggi dei demoni di gestione dei comandi
+ programmati (\cmd{cron} e \cmd{at}).\\
+\macro{LOG\_DAEMON} & Demoni di sistema.\\
+\macro{LOG\_FTP} & Server FTP.\\
+\macro{LOG\_KERN} & Messaggi del kernel\\
+\macro{LOG\_LOCAL0} & Riservato all'amministratore per uso locale\\
+--- & \\
+\macro{LOG\_LOCAL7} & Riservato all'amministratore per uso locale\\
+\macro{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti \\
+\macro{LOG\_MAIL} & Messaggi del sistema di posta elettronica\\
+\macro{LOG\_NEWS} & Messaggi del sistema di gestione delle news (USENET) \\
+\macro{LOG\_SYSLOG} & Messaggi generati dallo stesso \cmd{syslogd}\\
+\macro{LOG\_USER} & Messaggi generici a livello utente\\
+\macro{LOG\_UUCP} & Messaggi del sistema UUCP\\
\hline
\end{tabular}
\caption{Valori possibili per l'argomento \param{facility} di \func{openlog}.}
\label{tab:sess_syslog_facility}
\end{table}
+L'argomento \param{option} serve invece per controllare il comportamento della
+funzione \func{openlog} e delle modalità con cui le successive chiamate
+scriveranno i messaggi, esso viene specificato come maschera binaria composta
+con un OR aritmetico di una qualunque delle costanti riportate in
+\tabref{tab:sess_openlog_option}.
+
+\begin{table}[htb]
+\centering
+\begin{tabular}[c]{|l|p{8cm}|}
+\hline
+\textbf{Valore}& \textbf{Significato}\\
+\hline
+\hline
+\macro{LOG\_CONS} & Scrive sulla console quando. \\
+\macro{LOG\_NDELAY} & Sostituisce \macro{LOG\_AUTH}.\\
+\macro{LOG\_NOWAIT} & Messaggi dei demoni di gestione dei comandi
+ programmati (\cmd{cron} e \cmd{at}).\\
+\macro{LOG\_ODELAY} & .\\
+\macro{LOG\_PERROR} & Stampa anche su \file{stderr}.\\
+\macro{LOG\_PID} & Inserisce nei messaggi il \acr{pid} del processo
+ chiamante. \\
+\hline
+\end{tabular}
+\caption{Valori possibili per l'argomento \param{option} di \func{openlog}.}
+\label{tab:sess_openlog_option}
+\end{table}
+
+La funzione che si usa per generare un messaggio è \func{syslog}, dato che
+l'uso di \func{openlog} è ozionale, sarà quest'ultima a provvede a chiamare la
+prima qualora ciò non sia stato fatto (nel qual caso il valore di
+\param{ident} è nullo). Il suo prototipo è:
+\begin{prototype}{syslog.h}
+{void syslog(int priority, const char *format, ...)}
+
+Genera un messaggio di priorità \param{priority}.
+
+\bodydesc{La funzione non restituisce nulla.}
+\end{prototype}
+
+Il comportamento della funzione è analogo quello di \func{printf}, e il valore
+dell'argomento \param{format} è identico a quello descritto nella pagina di
+manuale di quest'ultima (per i valori principali si può vedere la trattazione
+sommaria che se ne è fatto in \secref{sec:file_formatted_io}); l'unica
+differenza è che la sequenza \cmd{\%m} viene rimpiazzata dalla stringa
+restituita da \code{strerror(errno)}. Gli argomenti seguenti i primi due
+devono essere forniti secondo quanto richiesto da \func{format}.
+
+L'argomento \param{priority} permette invece di impostare l'importanza del
+messaggio; il valore deve essere impostato i valori possibili sono riportati
+in \secref{tab:sess_syslog_priority}.
+
+\begin{table}[htb]
+\centering
+\begin{tabular}[c]{|l|p{8cm}|}
+\hline
+\textbf{Valore}& \textbf{Significato}\\
+\hline
+\hline
+\macro{LOG\_EMERG} & Il sistema è inutilizzabile. \\
+\macro{LOG\_ALERT} & C'è una emergenza che richiede intervento immediato.\\
+\macro{LOG\_CRIT} & Si è in una condizione critica.\\
+\macro{LOG\_ERR} & Si è in una condizione di errore.\\
+\macro{LOG\_WARNING} & Messaggio di avvertimento.\\
+\macro{LOG\_NOTICE} & Notizia significativa relativa al comportamento.\\
+\macro{LOG\_INFO} & Messaggio informativo. \\
+\macro{LOG\_DEBUG} & Messaggio di debug.\\
+\hline
+\end{tabular}
+\caption{Valori possibili per l'argomento \param{priority} di \func{syslog}.}
+\label{tab:sess_syslog_priority}
+\end{table}
+
+Dato che in molti programmi
+
+Il sistema del \textit{syslog} usa la priorità del messaggio per classificare
+gli stessi, è inoltre possibile restringere l'emissione dei messaggi
+attraverso l'uso della funzione \func{setlogmask}, il cui prototipo è:
+\begin{prototype}{syslog.h}
+{int setlogmask(int mask)}
+
+Imposta la maschera dei log al valore specificato.
+
+\bodydesc{La funzione restituisce il precedente valore.}
+\end{prototype}
+
+
\section{L'I/O su terminale}
\label{sec:sess_terminal_io}