+\subsection{Chiamate a funzioni e \textit{system call}}
+\label{sec:proc_syscall}
+
+Come accennato in sez.~\ref{sec:intro_syscall} un programma può utilizzare le
+risorse che il sistema gli mette a disposizione attraverso l'uso delle
+opportune \textit{system call}. Abbiamo inoltre appena visto come all'avvio un
+programma venga messo in grado di chiamare le funzioni fornite da eventuali
+librerie condivise da esso utilizzate.
+
+Vedremo nel resto della guida quali sono le risorse del sistema accessibili
+attraverso le \textit{system call} e tratteremo buona parte delle funzioni
+messe a disposizione dalla libreria standard del C, in questa sezione però si
+forniranno alcune indicazioni generali sul come fare perché un programma possa
+utilizzare queste funzioni.
+
+\itindbeg{header~file}
+
+In sez.~\ref{sec:intro_standard} abbiamo accennato come le funzioni definite
+nei vari standard siano definite in una serie di \textit{header file} (in
+italiano \textsl{file di intestazione}). Vengono chiamati in questo modo quei
+file, forniti insieme al codice delle librerie, che contengono le
+dichiarazioni delle variabili, dei tipi di dati, delle macro di preprocessore
+e soprattutto delle funzioni che fanno parte di una libreria.
+
+Questi file sono necessari al compilatore del linguaggio C per ottenere i
+riferimenti ai nomi delle funzioni (e alle altre risorse) definite in una
+libreria, per questo quando si vogliono usare le funzioni di una libreria
+occorre includere nel proprio codice gli \textit{header file} che le
+definiscono con la direttiva \code{\#include}. Dato che le funzioni devono
+essere definite prima di poterle usare in genere gli \textit{header file}
+vengono inclusi all'inizio del programma. Se inoltre si vogliono utilizzare le
+macro di controllo delle funzionalità fornite dai vari standard illustrate in
+sez.~\ref{sec:intro_gcc_glibc_std} queste, come accennato, dovranno a loro
+volta essere definite prima delle varie inclusioni.
+
+Ogni libreria fornisce i propri file di intestazione per i quali si deve
+consultare la documentazione, ma in tab.~\ref{tab:intro_posix_header} si sono
+riportati i principali \textit{header file} definiti nella libreria standard
+del C (nel caso la \acr{glibc}) che contengono le varie funzioni previste
+negli standard POSIX ed ANSI C, e che prevedono la definizione sia delle
+funzioni di utilità generica che delle interfacce alle \textit{system call}. In
+seguito per ciascuna funzione o \textit{system call} che tratteremo
+indicheremo anche quali sono gli \textit{header file} contenenti le necessarie
+definizioni.
+
+\begin{table}[htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|l|c|c|l|}
+ \hline
+ \multirow{2}{*}{\textbf{Header}}&
+ \multicolumn{2}{|c|}{\textbf{Standard}}&
+ \multirow{2}{*}{\textbf{Contenuto}} \\
+ \cline{2-3}
+ & ANSI C& POSIX& \\
+ \hline
+ \hline
+ \file{assert.h}&$\bullet$& -- & Verifica le asserzioni fatte in un
+ programma.\\
+ \file{ctype.h} &$\bullet$& -- & Tipi standard.\\
+ \file{dirent.h}& -- &$\bullet$& Manipolazione delle directory.\\
+ \file{errno.h} & -- &$\bullet$& Errori di sistema.\\
+ \file{fcntl.h} & -- &$\bullet$& Controllo sulle opzioni dei file.\\
+ \file{limits.h}& -- &$\bullet$& Limiti e parametri del sistema.\\
+ \file{malloc.h}&$\bullet$& -- & Allocazione della memoria.\\
+ \file{setjmp.h}&$\bullet$& -- & Salti non locali.\\
+ \file{signal.h}& -- &$\bullet$& Gestione dei segnali.\\
+ \file{stdarg.h}&$\bullet$& -- & Gestione di funzioni a argomenti
+ variabili.\\
+ \file{stdio.h} &$\bullet$& -- & I/O bufferizzato in standard ANSI C.\\
+ \file{stdlib.h}&$\bullet$& -- & Definizioni della libreria standard.\\
+ \file{string.h}&$\bullet$& -- & Manipolazione delle stringhe.\\
+ \file{time.h} & -- &$\bullet$& Gestione dei tempi.\\
+ \file{times.h} &$\bullet$& -- & Gestione dei tempi.\\
+ \file{unistd.h}& -- &$\bullet$& Unix standard library.\\
+ \file{utmp.h} & -- &$\bullet$& Registro connessioni utenti.\\
+ \hline
+ \end{tabular}
+ \caption{Elenco dei principali \textit{header file} definiti dagli standard
+ POSIX e ANSI C.}
+ \label{tab:intro_posix_header}
+\end{table}
+
+Un esempio di inclusione di questi file, preso da uno dei programmi di
+esempio, è il seguente, e si noti come gli \textit{header file} possano essere
+referenziati con il nome fra parentesi angolari, nel qual caso si indica l'uso
+di quelli installati con il sistema,\footnote{in un sistema GNU/Linux che
+ segue le specifiche del \textit{Filesystem Hierarchy Standard} (per maggiori
+ informazioni si consulti sez.~1.2.3 di \cite{AGL}) si trovano sotto
+ \texttt{/usr/include}.} o fra virgolette, nel qual caso si fa riferimento ad
+una versione locale, da indicare con un pathname relativo:
+\includecodesnip{listati/main_include.c}
+
+Si tenga presente che oltre ai nomi riservati a livello generale di cui si è
+parlato in sez.~\ref{sec:proc_main}, alcuni di questi \textit{header file}
+riservano degli ulteriori identificativi, il cui uso sarà da evitare, ad
+esempio si avrà che:
+\begin{itemize*}
+\item in \file{dirent.h} vengono riservati i nomi che iniziano con
+ ``\texttt{d\_}'' e costituiti da lettere minuscole,
+\item in \file{fcntl.h} vengono riservati i nomi che iniziano con
+ ``\texttt{l\_}'', ``\texttt{F\_}'',``\texttt{O\_}'' e ``\texttt{S\_}'',
+\item in \file{limits.h} vengono riservati i nomi che finiscono in
+ ``\texttt{\_MAX}'',
+\item in \file{signal.h} vengono riservati i nomi che iniziano con
+ ``\texttt{sa\_}'' e ``\texttt{SA\_}'',
+\item in \file{sys/stat.h} vengono riservati i nomi che iniziano con
+ ``\texttt{st\_}'' e ``\texttt{S\_}'',
+\item in \file{sys/times.h} vengono riservati i nomi che iniziano con
+ ``\texttt{tms\_}'',
+\item in \file{termios.h} vengono riservati i nomi che iniziano con
+ ``\texttt{c\_}'', ``\texttt{V}'', ``\texttt{I}'', ``\texttt{O}'' e
+ ``\texttt{TC}'' e con ``\texttt{B}'' seguito da un numero,
+\item in \file{grp.h} vengono riservati i nomi che iniziano con
+ ``\texttt{gr\_}'',
+\item in \file{pwd.h}vengono riservati i nomi che iniziano con
+ ``\texttt{pw\_}'',
+\end{itemize*}