+La funzione restituisce il valore della maschera corrente, e se si passa un
+valore nullo per \param{mask} la maschera corrente non viene modificata; in
+questo modo si può leggere il valore della maschera corrente. Indicando un
+valore non nullo per \param{mask} la registrazione dei messaggi viene
+disabilitata per tutte quelle priorità che non rientrano nella maschera. In
+genere il valore viene impostato usando la macro \macro{LOG\_MASK(p)} dove
+\code{p} è una delle costanti di tab.~\ref{tab:sess_syslog_priority}. É
+inoltre disponibile anche la macro \macro{LOG\_UPTO(p)} che permette di
+specificare automaticamente tutte le priorità fino a quella indicata da
+\code{p}.
+
+Una volta che si sia certi che non si intende registrare più nessun messaggio
+si può chiudere esplicitamente la connessione al \textit{syslog} con la
+funzione \funcd{closelog}, il cui prototipo è:
+\begin{prototype}{syslog.h}{void closelog(void)}
+
+Chiude la connessione al \textit{syslog}.
+
+\bodydesc{La funzione non restituisce nulla.}
+\end{prototype}
+\noindent l'uso di questa funzione è comunque completamente opzionale.
+
+Come si evince anche dalla presenza della facility \const{LOG\_KERN} in
+tab.~\ref{tab:sess_syslog_facility}, uno dei possibili utenti del servizio del
+\textit{syslog} è anche il kernel, che a sua volta può avere necessità di
+inviare messaggi verso l'\textit{user space}. I messaggi del kernel sono
+mantenuti in un apposito buffer circolare e generati all'interno del kernel
+tramite la funzione \func{printk}, analoga alla \func{printf} usata in
+\textit{user space}.\footnote{una trattazione eccellente dell'argomento si
+ trova nel quarto capitolo di \cite{LinDevDri}.}
+
+Come per i messaggi ordinari anche i messaggi del kernel hanno una priorità ma
+in questo caso non si può contare sulla coincidenza con le costanti di
+tab.~\ref{tab:sess_syslog_priority} dato che il codice del kernel viene
+mantenuto in maniera indipendente dalle librerie. Per questo motivo le varie
+priorità usate dal kernel sono associate ad un valore numerico che viene
+tradotto in una stringa preposta ad ogni messaggio, secondo i valori che si
+sono riportati in fig.~\ref{fig:printk_priority}
+
+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{15cm}
+ \includestruct{listati/printk_prio.c}
+ \end{minipage}
+ \normalsize
+ \caption{Definizione delle stringe coi relativi valori numerici che indicano
+ le priorità dei messaggi del kernel, ripresa da \texttt{linux/kernel.h}.}
+ \label{fig:printk_priority}
+\end{figure}
+
+Dato che i messaggi generati da \func{printk} hanno un loro specifico formato,
+tradizionalmente si usava un demone ausiliario, \cmd{klogd}, per leggerli,
+rimappare le priorità sui valori di tab.~\ref{tab:sess_syslog_priority} e
+inviarli al sistema del \textit{syslog} nella facility \const{LOG\_KERN},
+anche se oggi i nuovi demoni che realizzano il servizio (come \texttt{rsyslog}
+o \texttt{syslog-ng}) sono in grado di fare tutto questo da soli.
+
+Ma i messaggi del kernel non sono necessariamente connessi al sistema del
+\textit{syslog}; ad esempio possono anche essere letti direttamente dal buffer
+con il comando \texttt{dmesg}. Inoltre è previsto che essi vengano anche
+stampati direttamente sul terminale indicato come console di
+sistema,\footnote{quello che viene indicato con il parametro di avvio
+ \texttt{console} del kernel, si consulti al riguardo sez.~5.3.1 di
+ \cite{AGL}.} se superano una certa priorità, in modo che sia possibile
+vederli anche in caso di blocco totale del sistema (nell'assunzione che la
+console sia collegata).
+
+In particolare la stampa dei messaggi sulla console è controllata con
+\procfile{/proc/sys/kernel/printk} (o dall'equivalente parametro di
+\func{sysctl}) che prevede quattro valori numerici interi: il primo indica la
+priorità di base oltre la quale vengono stampati i messaggi sulla console, il
+secondo la priorità di default assegnata ai messaggi che non ne hanno
+impostata una, il terzo il valore minimo che si può assegnare al primo
+valore,\footnote{quello che può essere usato con una delle operazioni di
+ gestione che vedremo a breve per ``\textsl{silenziare}'' il kernel. } ed il
+quarto come valore di default.\footnote{anch'esso viene usato nelle operazioni
+ di controllo per tornare ad un valore predefinito.}
+
+Per la lettura dei messaggi del kernel e la gestione del relativo buffer
+circolare esiste una apposita \textit{system call} chiamata anch'essa
+\texttt{syslog}, ma dato il conflitto di nomi questa viene rimappata su
+un'altra funzione di libreria, in particolare nelle \acr{glibc} essa viene
+invocata tramite la funzione \funcd{klogctl}, il cui prototipo è:
+\begin{prototype}{sys/klog.h}{int klogctl(int op, char *buffer, int len)}
+
+Gestisce il buffer dei messaggi di log del kernel.
+
+\bodydesc{La funzione restituisce un intero positivo dipendente
+ dall'operazione scelta o $-1$ in caso di errore, nel qual caso \var{errno}
+ assumerà i valori:
+ \begin{errlist}
+ \item[\errcode{EINVAL}] l'argomento \param{op} non ha un valore valido.
+ \item[\errcode{ERESTARTSYS}] l'operazione è stata interrotta da un segnale.
+ \item[\errcode{EPERM}] non si hanno i privilegi richiesti per l'operazione.
+ \item[\errcode{ENOSYS}] il supporto per \func{printk} non è stato compilato
+ nel kernel.
+ \end{errlist}
+ ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
+}
+\end{prototype}
+
+
+
+La lettura dei messaggi del kernel può avvenire direttamente da
+
+
+Il funzionamento del kernel prevede anche che sia possibile indicare quali
+messaggi di \func{printk} devono essere stampati direttamente sulla console,
+con la possibilità di impostare
+
+
+
+
+\itindend{syslog}