Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ESERCIZIO 1 (1 punti)
Data listruzione int a = 8, b = 15; indicare il risultato delle istruzioni seguenti:
(1 punti)
printf("%d\n", ( (a >> 2) | 8) >> 2 ); ___________
printf("%d\n", ( (a | b) ^ b ) );
___________
ESERCIZIO 2 (4 punti)
(2.1) Illustrare il funzionamento della system call
int execve(const char *pathname, char *const argv[], char *const envp[]);
(2 punti)
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
(2.2) Illustrare sinteticamente il funzionamento della system call pipe a partire dal prototipo
int pipe( int fd[2] );
(2 punto)
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
ESERCIZIO 3 (1 punti)
(1 punti)
Spiegare succintamente listruzione seguente, in particolare in riferimento ai parametri della chiamata:
if((msgrcv(m_id, &q, sizeof(q), getpid(),0)) == -1)
errExit("msgrcv error");
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
___________________________________________________________________________________
SOLUZIONI 26/9/2012
che eseguono due diversi comandi. Un pipe uno strumento di comunicazione fra due processi: uno
scrive uno stream di byte su un descrittore di file, e laltro legge lo stream di byte da un descrittore di
file. I dati passano in maniera unidirezionale attraverso il pipe in sequenza: i byte sono letti nello stesso
ordine in cui sono stati scritti.
In un caso di utilizzo tipico, durante una fork() il processo figlio eredita copia dei descrittori di file del
genitore. Subito dopo la fork() uno dei due processi chiude il proprio lato del pipe in lettura e laltro
chiude il proprio in lettura, realizzando cos lunidirezionalit della comunicazione. Come con gli altri
descrittori di file, possibile utilizzare le system call read() e write() per effettuare operazioni di I/O
sul pipe.
ESERCIZIO 3 (1 punti)
(1 punto)
Illustrare succintamente listruzione seguente, in particolare in riferimento ai parametri attuali della
chiamata:
if((msgrcv(m_id, &q, sizeof(q), getpid(),0)) == -1)
errExit("msgrcv error");
Soluzione [07_code_messaggi.pdf, pagine 15 e sgg.]
La system call msgrcv utilizzata per prelevare un messaggio dalla coda identificata dallintero m_id;
il messaggio copiato nel buffer riferito da q, la cui dimensione massima costituita da sizeof(q) byte.
Il penultimo parametro, che costituisce il msgtype permette di stabilire un criterio per prelevare i
messaggi: se il msgtype impostato a 0, prelevato il primo messaggio; se il msgtype maggiore di 0
prelevato il primo messaggio il cui mtype eguale al msgtype (nellesempio attuale, il processo
chiamante seleziona un messaggio con msgtype pari al pid del processo stesso); infine, se il msgtype
minore di 0, la coda funziona come una coda con priorit: in questo caso prelevato il primo
messaggio con il pi basso mtype minore o uguale al valore assoluto di msgtype. Lultimo argomento
una maschera di bit che pu assumere alcuni valori predefiniti, come per esempio IPC_NOWAIT o
MSG_NOERROR.