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.

Esercizio 4:<br />

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

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

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

{<br />

pid_t pid;<br />

}<br />

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

{<br />

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

exit(1);<br />

}<br />

pr<strong>in</strong>tf("ciao, pid vale %d!\n", pid);<br />

exit(0);<br />

Modificare il programma aggiungendo altre fork(), verificando che il numero dei processi<br />

generati cresce esponenzialmente. Modificare il programma stampando il vero PID di ogni<br />

processo utilizzando <strong>la</strong> funzione getpid().<br />

Esercizio 5: Il processo figlio crea un nuovo file (il cui nome deve essere specificato<br />

come argomento), il processo padre attende il completamento del figlio e<br />

<strong>su</strong>ccessivamente legge il contenuto del file.<br />

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

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

#def<strong>in</strong>e N 256<br />

<strong>in</strong>t ma<strong>in</strong> (<strong>in</strong>t argc, char **argv)<br />

{<br />

<strong>in</strong>t nread, nwrite = 0, atteso, status, fileh, pid;<br />

char st1[N];<br />

char st2[N] = "";<br />

/* APERTURA IN LETTURA/SCRITTURA */<br />

fileh = open(argv[1], O_CREAT|O_RDWR|O_TRUNC, 0644);<br />

if (fileh == -1)<br />

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

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

{<br />

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

close(fileh);<br />

exit(-1);<br />

}<br />

else if (pid==0)

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

Saved successfully!

Ooh no, something went wrong!