sez.~3.1.2 di \cite{AGL}.
Una volta completate le operazioni di inizializzazione di \cmd{ld-linux.so}, il
sez.~3.1.2 di \cite{AGL}.
Una volta completate le operazioni di inizializzazione di \cmd{ld-linux.so}, il
al programmatore chiamare così la funzione principale del programma da cui si
suppone che inizi l'esecuzione. In ogni caso senza questa funzione lo stesso
\textit{link-loader} darebbe luogo ad errori. Lo standard ISO C specifica che
al programmatore chiamare così la funzione principale del programma da cui si
suppone che inizi l'esecuzione. In ogni caso senza questa funzione lo stesso
\textit{link-loader} darebbe luogo ad errori. Lo standard ISO C specifica che
rappresentano gli argomenti passati da linea di comando (su cui torneremo in
sez.~\ref{sec:proc_par_format}), in sostanza un prototipo che va sempre bene è
il seguente:
rappresentano gli argomenti passati da linea di comando (su cui torneremo in
sez.~\ref{sec:proc_par_format}), in sostanza un prototipo che va sempre bene è
il seguente:
*envp[]}, che fornisce l'\textsl{ambiente} del programma; questa forma però
non è prevista dallo standard POSIX.1 per cui se si vogliono scrivere
programmi portabili è meglio evitarla. Per accedere all'ambiente, come vedremo
*envp[]}, che fornisce l'\textsl{ambiente} del programma; questa forma però
non è prevista dallo standard POSIX.1 per cui se si vogliono scrivere
programmi portabili è meglio evitarla. Per accedere all'ambiente, come vedremo
viene sempre definita automaticamente.
Ogni programma viene fatto partire mettendo in esecuzione il codice contenuto
viene sempre definita automaticamente.
Ogni programma viene fatto partire mettendo in esecuzione il codice contenuto
funzioni definite nel programma occorre tenere conto che, nel momento stesso
in cui si usano le librerie di sistema (vale a dire la \acr{glibc}) alcuni
nomi sono riservati e non possono essere utilizzati.
funzioni definite nel programma occorre tenere conto che, nel momento stesso
in cui si usano le librerie di sistema (vale a dire la \acr{glibc}) alcuni
nomi sono riservati e non possono essere utilizzati.
\label{sec:proc_conclusion}
Normalmente un programma conclude la sua esecuzione quando si fa ritornare la
\label{sec:proc_conclusion}
Normalmente un programma conclude la sua esecuzione quando si fa ritornare la
linguaggio C all'interno della stessa, o se si richiede esplicitamente la
chiusura invocando direttamente la funzione \func{exit}. Queste due modalità
sono assolutamente equivalenti, dato che \func{exit} viene chiamata in maniera
linguaggio C all'interno della stessa, o se si richiede esplicitamente la
chiusura invocando direttamente la funzione \func{exit}. Queste due modalità
sono assolutamente equivalenti, dato che \func{exit} viene chiamata in maniera
valore di ritorno (che essendo .
La funzione \funcd{exit}, che è completamente generale, essendo definita dallo
valore di ritorno (che essendo .
La funzione \funcd{exit}, che è completamente generale, essendo definita dallo
costituisce quello che viene chiamato lo \textsl{stato di uscita}
(l'\textit{exit status}) del processo. In generale si usa questo valore per
fornire al processo padre (come vedremo in sez.~\ref{sec:proc_wait}) delle
informazioni generiche sulla riuscita o il fallimento del programma appena
terminato.
costituisce quello che viene chiamato lo \textsl{stato di uscita}
(l'\textit{exit status}) del processo. In generale si usa questo valore per
fornire al processo padre (come vedremo in sez.~\ref{sec:proc_wait}) delle
informazioni generiche sulla riuscita o il fallimento del programma appena
terminato.
sono numeri interi di tipo \ctyp{int}, si deve tener presente che il valore
dello stato di uscita viene comunque troncato ad 8 bit,
per cui deve essere sempre compreso fra 0 e 255. Si tenga presente che se si
sono numeri interi di tipo \ctyp{int}, si deve tener presente che il valore
dello stato di uscita viene comunque troncato ad 8 bit,
per cui deve essere sempre compreso fra 0 e 255. Si tenga presente che se si
ha un valore di uscita indefinito, è pertanto consigliabile di concludere
sempre in maniera esplicita detta funzione.
ha un valore di uscita indefinito, è pertanto consigliabile di concludere
sempre in maniera esplicita detta funzione.
richiede che siano registrabili almeno \const{ATEXIT\_MAX} funzioni (il
valore può essere ottenuto con \func{sysconf}, vedi
sez.~\ref{sec:sys_sysconf}).} sia per la chiamata ad \func{exit} che per il
richiede che siano registrabili almeno \const{ATEXIT\_MAX} funzioni (il
valore può essere ottenuto con \func{sysconf}, vedi
sez.~\ref{sec:sys_sysconf}).} sia per la chiamata ad \func{exit} che per il
\funcd{atexit}, il cui prototipo è:
\begin{funcproto}{ \fhead{stdlib.h} \fdecl{void (*function)(void)}
\funcd{atexit}, il cui prototipo è:
\begin{funcproto}{ \fhead{stdlib.h} \fdecl{void (*function)(void)}
volontariamente la propria esecuzione è attraverso una chiamata alla
\textit{system call} \func{\_exit}, sia che questa venga fatta esplicitamente,
o in maniera indiretta attraverso l'uso di \func{exit} o il ritorno di
volontariamente la propria esecuzione è attraverso una chiamata alla
\textit{system call} \func{\_exit}, sia che questa venga fatta esplicitamente,
o in maniera indiretta attraverso l'uso di \func{exit} o il ritorno di
Uno schema riassuntivo che illustra le modalità con cui si avvia e conclude
normalmente un programma è riportato in fig.~\ref{fig:proc_prog_start_stop}.
Uno schema riassuntivo che illustra le modalità con cui si avvia e conclude
normalmente un programma è riportato in fig.~\ref{fig:proc_prog_start_stop}.
-essere esplicitamente rilasciata usando la funzione \func{free},\footnote{le
- glibc provvedono anche una funzione \func{cfree} definita per compatibilità
+essere esplicitamente rilasciata usando la funzione \funcd{free},\footnote{le
+ glibc provvedono anche una funzione \funcm{cfree} definita per compatibilità
Tutti i programmi hanno la possibilità di ricevere argomenti e opzioni quando
vengono lanciati e come accennato in sez.~\ref{sec:proc_main} questo viene
effettuato attraverso gli argomenti \param{argc} e \param{argv} ricevuti nella
Tutti i programmi hanno la possibilità di ricevere argomenti e opzioni quando
vengono lanciati e come accennato in sez.~\ref{sec:proc_main} questo viene
effettuato attraverso gli argomenti \param{argc} e \param{argv} ricevuti nella
al programma dalla shell o dal processo che esegue la \func{exec} (secondo le
modalità che vedremo in sez.~\ref{sec:proc_exec}) quando questo viene messo in
esecuzione.
al programma dalla shell o dal processo che esegue la \func{exec} (secondo le
modalità che vedremo in sez.~\ref{sec:proc_exec}) quando questo viene messo in
esecuzione.
\fhead{unistd.h}
\fdecl{int getopt(int argc, char * const argv[], const char *optstring)}
\fdesc{Esegue la scansione delle opzioni negli argomenti della funzione
\fhead{unistd.h}
\fdecl{int getopt(int argc, char * const argv[], const char *optstring)}
\fdesc{Esegue la scansione delle opzioni negli argomenti della funzione
}
{Ritorna il carattere che segue l'opzione, ``\texttt{:}'' se manca un
parametro all'opzione, ``\texttt{?}'' se l'opzione è sconosciuta, e $-1$ se
}
{Ritorna il carattere che segue l'opzione, ``\texttt{:}'' se manca un
parametro all'opzione, ``\texttt{?}'' se l'opzione è sconosciuta, e $-1$ se
all'esecuzione del programma, ed una stringa \param{optstring} che indica
quali sono le opzioni valide. La funzione effettua la scansione della lista
degli argomenti ricercando ogni stringa che comincia con il carattere
all'esecuzione del programma, ed una stringa \param{optstring} che indica
quali sono le opzioni valide. La funzione effettua la scansione della lista
degli argomenti ricercando ogni stringa che comincia con il carattere