11.07.2014 Views

UNIX: testo della esercitazione 4 in laboratorio su primitive per la ...

UNIX: testo della esercitazione 4 in laboratorio su primitive per la ...

UNIX: testo della esercitazione 4 in laboratorio su primitive per la ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

#<strong>in</strong>clude <br />

unsigned <strong>in</strong>t sleep(unsigned <strong>in</strong>t secs);<br />

La funzione sleep sospende un processo <strong>per</strong> un <strong>per</strong>iodo di tempo pari a secs secondi.<br />

<strong>in</strong>t execv(char *file_name, *argv[]);<br />

La primitiva execv non produce nuovi processi ma solo il cambiamento dell’ambiente del<br />

processo <strong>in</strong>teressato. Il processo corrente passa ad eseguire un nuovo comando il cui path è<br />

specificato dal primo argomento file name. Il secondo argomento è un puntatore ad una lista<br />

di puntatori a carattere che rappresenta <strong>la</strong> l<strong>in</strong>ea di comando.<br />

<strong>in</strong>t execve(char *file_name, *argv[], *envp[]);<br />

La primitiva execve ha lo stesso comportamento di execv. L’unica differenza è <strong>la</strong> presenza di<br />

un terzo parametro (puntatore ad una lista di puntatori a carattere) che consente di specificare<br />

le variabili d’ambiente del nuovo programma.<br />

2 Esempi<br />

Tutti i file con il codice sorgente degli esercizi proposti (es∗.c) si trovano nel direttorio:<br />

/home/soa/eserc4<br />

Esercizio<br />

1: padre e figlio<br />

#<strong>in</strong>clude <br />

<strong>in</strong>t ma<strong>in</strong>()<br />

{<br />

pr<strong>in</strong>tf("Sono il processo %d e sono figlio di %d\n", getpid(), getppid());<br />

}<br />

Esercizio<br />

2: codice diverso tra padre e figlio<br />

#<strong>in</strong>clude <br />

<strong>in</strong>t ma<strong>in</strong>()<br />

{<br />

<strong>in</strong>t pid;<br />

if ((pid=fork()) < 0)<br />

{<br />

<strong>per</strong>ror("fork error");<br />

exit(1);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!