+Benché la gestione ordinaria possa essere effettuata attraverso le funzioni
+che abbiamo già esaminato nelle sezioni precedenti, esistono una serie di
+proprietà e caratteristiche particolari dei processi non coperte da esse, per
+la cui gestione è stata predisposta una apposita \textit{system call} che
+fornisce una interfaccia generica per tutte le operazioni specialistiche. La
+funzione è \funcd{prctl} ed il suo prototipo è:\footnote{la funzione non è
+ standardizzata ed è specifica di Linux, anche se ne esiete una analoga in
+ IRIX, è stata introdotta con il kernel 2.1.57.}
+\begin{functions}
+ \headdecl{sys/prctl.h}
+
+ \funcdecl{int prctl(int option, unsigned long arg2, unsigned long arg3,
+ unsigned long arg4, unsigned long arg5)}
+
+ Esegue una operazione speciale sul processo corrente.
+
+ \bodydesc{La funzione ritorna 0 o un valore positivo dipendente
+ dall'operazione in caso di successo e $-1$ in caso di errore, nel qual
+ caso \var{errno} assumerà valori diversi a seconda del tipo di operazione
+ richiesta (in genere \errval{EINVAL} o \errval{EPERM}). }
+\end{functions}
+
+La funzione ritorna un valore nullo o positivo in caso di successo e $-1$ in
+caso di errore; il significato degli argomenti della funzione successivi al
+primo, il valore di ritorno in caso di successo, il tipo di errore restituito
+in \var{errno} dipendono dall'operazione eseguita, indicata tramite il primo
+argomento, \param{option}. Questo è un valore intero che identifica
+l'operazione, e deve essere specificato con l'uso di una delle costanti
+predefinite del seguente elenco, che illustra quelle disponibili al momento:
+
+\begin{basedescript}{\desclabelstyle{\pushlabel}}
+\item[\const{PR\_CAPBSET\_READ}] Controlla la disponibilità di una delle
+ \textit{capabilities} (vedi sez.~\ref{sec:proc_capabilities}). La funzione
+ ritorna 1 se la capacità specificata nell'argomento \param{arg2} (con una
+ delle costanti di tab.~\ref{tab:proc_capabilities}) è presente nel
+ \textit{capabilities bounding set} del processo e zero altrimenti,
+ se \param{arg2} non è un valore valido si avrà un errore di \errval{EINVAL}.
+ Introdotta a partire dal kernel 2.6.25.
+\item[\const{PR\_CAPBSET\_DROP}] Rimuove permanentemente una delle
+ \textit{capabilities} (vedi sez.~\ref{sec:proc_capabilities}) dal processo e
+ da tutti i suoi discendenti. La funzione cancella la capacità specificata
+ nell'argomento \param{arg2} con una delle costanti di
+ tab.~\ref{tab:proc_capabilities} dal \textit{capabilities bounding set} del
+ processo. L'operazione richiede i privilegi di amministratore (la capacità
+ \const{CAP\_SETPCAP}), altrimenti fallisce con un errore di \errval{EPERM};
+ se il valore di \param{arg2} non è valido o se il supporto per le
+ \textit{file capabilities} non è stato compilato nel kernel fallisce con un
+ errore di \errval{EINVAL}. Introdotta a partire dal kernel 2.6.25.
+\item[\const{PR\_SET\_DUMPABLE}] Imposta il flag che determina se la
+ terminazione di un processo a causa di un segnale per il quale è prevista la
+ generazione di un file di \itindex{core~dump} \textit{core dump} (vedi
+ sez.~\ref{sec:sig_standard}) lo genera effettivamente. In genere questo flag
+ viene attivato automaticamente, ma per evitare problemi di sicurezza (la
+ generazione di un file da parte di processi privilegiati può essere usata
+ per sovrascriverne altri) viene cancellato quando si mette in esecuzione un
+ programma con i bit \acr{suid} e \acr{sgid} attivi (vedi
+ sez.~\ref{sec:file_special_perm}) o con l'uso delle funzioni per la modifica
+ degli \textit{user-ID} dei processi (vedi
+ sez.~\ref{sec:proc_setuid}). L'operazione è stata introdotta a partire dal
+ kernel 2.3.20, fino al kernel 2.6.12 e per i kernel successivi al 2.6.17 era
+ possibile usare solo un valore 0 di \param{arg2} per disattivare il flag ed
+ un valore 1 per attivarlo, nei kernel dal 2.6.13 al 2.6.17 è stato
+ supportato anche il valore 2 che causava la generazione di un
+ \itindex{core~dump} \textit{core dump} leggibile solo
+ dall'amministratore.\footnote{la funzionalità è stata rimossa per motivi di
+ sicurezza, in quanto consentiva ad un utente normale di creare un file di
+ \textit{core dump} appartenente all'amministratore in directory dove
+ l'utente avrebbe avuto permessi di accesso.}
+\item[\const{PR\_GET\_DUMPABLE}] Ottiene come valore di ritorno della funzione
+ lo stato corrente del flag che controlla la effettiva generazione dei
+ \itindex{core~dump} \textit{core dump}. Introdotta a partire dal kernel
+ 2.3.20.
+\item[\const{PR\_SET\_ENDIAN}] Imposta la \textit{endianess} del processo
+ chiamante secondo il valore fornito in \param{arg2}. I valori possibili sono
+ sono: \const{PR\_ENDIAN\_BIG} (\textit{big endian}),
+ \const{PR\_ENDIAN\_LITTLE} (\textit{little endian}), e
+ \const{PR\_ENDIAN\_PPC\_LITTLE} (lo pseudo \textit{little endian} del
+ PowerPC) Introdotta a partire dal kernel 2.6.18, solo per architettura
+ PowerPC.
+\item[\const{PR\_GET\_ENDIAN}] Ottiene il valore della \textit{endianess} del
+ processo chiamante, salvato sulla variabile puntata da \param{arg2} che deve
+ essere passata come di tipo \type{(int *)}. Introdotta a partire dal kernel
+ 2.6.18, solo su PowerPC.
+\item[\const{PR\_SET\_FPEMU}] Introdotta a partire dal kernel 2.4.18, solo su
+ ia64.
+\item[\const{PR\_GET\_FPEMU}] Introdotta a partire dal kernel 2.4.18, solo su
+ ia64.
+\item[\const{PR\_SET\_FPEXC}] Introdotta a partire dal kernel 2.4.21, solo su
+ PowerPC.
+\item[\const{PR\_GET\_FPEXC}] Introdotta a partire dal kernel 2.4.21, solo su
+ PowerPC.
+\item[\const{PR\_SET\_KEEPCAPS}] Introdotta a partire dal kernel 2.2.18.
+\item[\const{PR\_GET\_KEEPCAPS}] Introdotta a partire dal kernel 2.2.18.
+\item[\const{PR\_SET\_NAME}] Introdotta a partire dal kernel 2.6.9.
+\item[\const{PR\_GET\_NAME}] Introdotta a partire dal kernel 2.6.9.
+\item[\const{PR\_SET\_PDEATHSIG}] Introdotta a partire dal kernel 2.1.57.
+\item[\const{PR\_GET\_PDEATHSIG}] Introdotta a partire dal kernel 2.3.15.
+\item[\const{PR\_SET\_SECCOMP}] Introdotta a partire dal kernel 2.6.23.
+\item[\const{PR\_GET\_SECCOMP}] Introdotta a partire dal kernel 2.6.23.
+\item[\const{PR\_SET\_SECUREBITS}] Introdotta a partire dal kernel 2.6.26.
+\item[\const{PR\_GET\_SECUREBITS}] Introdotta a partire dal kernel 2.6.26.
+\item[\const{PR\_SET\_TIMING}] Introdotta a partire dal kernel 2.6.0-test4.
+\item[\const{PR\_GET\_TIMING}] Introdotta a partire dal kernel 2.6.0-test4.
+\item[\const{PR\_SET\_TSC}] Introdotta a partire dal kernel 2.6.26, solo su
+ x86.
+\item[\const{PR\_GET\_TSC}] Introdotta a partire dal kernel 2.6.26, solo su
+ x86.
+\item[\const{PR\_SET\_UNALIGN}] Introdotta con diverse versioni su diverse
+ architetture.
+\item[\const{PR\_GET\_UNALIGN}] Introdotta con diverse versioni su diverse
+ architetture.
+\label{sec:prctl_operation}
+\end{basedescript}
+
+
+