In realtà nei sistemi unix esiste un'altro modo per definire la funzione
\texttt{main}, che prevede la presenza di un terzo parametro, \texttt{char
In realtà nei sistemi unix esiste un'altro modo per definire la funzione
\texttt{main}, che prevede la presenza di un terzo parametro, \texttt{char
- *envp[]}, che fornisce l'\textsl{ambiente} (vedi \secref{proc_environ}) del
-programma; questa forma però non è prevista dallo standard POSIX.1 per cui se
-si vogliono scrivere programmi portabili è meglio evitarla.
+ *envp[]}, che fornisce l'\textsl{ambiente} (vedi \secref{sec:proc_environ})
+del programma; questa forma però non è prevista dallo standard POSIX.1 per cui
+se si vogliono scrivere programmi portabili è meglio evitarla.
Oltre alla conclusione ``normale'' esiste anche la possibilità di una
conclusione ``anomala'' del programma a causa di segnali o della chiamata alla
funzione \texttt{abort} (che comunque genera un segnale che termina il
Oltre alla conclusione ``normale'' esiste anche la possibilità di una
conclusione ``anomala'' del programma a causa di segnali o della chiamata alla
funzione \texttt{abort} (che comunque genera un segnale che termina il
Il valore di ritorno della funzione main, o quello usato nelle chiamate ad
\texttt{exit} e \texttt{\_exit}, viene chiamato \textit{exit status} e passato
Il valore di ritorno della funzione main, o quello usato nelle chiamate ad
\texttt{exit} e \texttt{\_exit}, viene chiamato \textit{exit status} e passato
possibile un processo possa essere terminato (da un segnale) prima che il
programma in esecuzione si sia concluso. In caso di conclusione normale del
programma però lo stato di uscita diventa parte dello stato di conclusione del
possibile un processo possa essere terminato (da un segnale) prima che il
programma in esecuzione si sia concluso. In caso di conclusione normale del
programma però lo stato di uscita diventa parte dello stato di conclusione del
presente che questo non comporta il salvataggio dei dati bufferizzati degli
stream), fa si che ogni figlio del processo sia ereditato da \texttt{init}
(vedi \secref{cha:process_handling}), manda un segnale \texttt{SIGCHLD} al
presente che questo non comporta il salvataggio dei dati bufferizzati degli
stream), fa si che ogni figlio del processo sia ereditato da \texttt{init}
(vedi \secref{cha:process_handling}), manda un segnale \texttt{SIGCHLD} al
uscita specificato in \texttt{status} che può essere raccolto usando la
funzione \texttt{wait} (vedi \secref{sec:prochand_wait}).
uscita specificato in \texttt{status} che può essere raccolto usando la
funzione \texttt{wait} (vedi \secref{sec:prochand_wait}).
Per questo motivo l'implementazione delle routine di allocazione delle glibc
mette a disposizione una serie di funzionalità (su cui torneremo in
Per questo motivo l'implementazione delle routine di allocazione delle glibc
mette a disposizione una serie di funzionalità (su cui torneremo in
le disallocazione, e definisce anche una serie di possibili agganci che
permettono di sostituire alle funzioni di libreria una propria versione (che
può essere più o meno specializzata per il debugging).
le disallocazione, e definisce anche una serie di possibili agganci che
permettono di sostituire alle funzioni di libreria una propria versione (che
può essere più o meno specializzata per il debugging).
Come spiegato in \secref{sec:proc_mem_gen} il kernel gestisce la memoria in
maniera trasparente ai processi, decidendo quando rimuovere pagine dalla
Come spiegato in \secref{sec:proc_mem_gen} il kernel gestisce la memoria in
maniera trasparente ai processi, decidendo quando rimuovere pagine dalla