GAPIL guida alla programmazione Linux (Italian Edition) by jim letni

GAPIL guida alla programmazione Linux (Italian Edition) by jim letni

autore:jim letni [letni, jim]
La lingua: ita
Format: epub
editore: UNKNOWN
pubblicato: 2021-04-16T22:00:00+00:00


/* write phrase */

49 fortune [n], strlen ( fortune [n ])+1);

50 close ( fifo_client ); /* close client fifo */

51 }

52}

Figura 11.7: Sezione principale del codice del server di fortunes basato sulle fifo. viene specificata, la presenza di un valore nullo provoca l’uscita dal programma attraverso la funzione (non riportata) che ne stampa le modalit`a d’uso. Dopo di che installa (13-15) la funzione che gestisce i segnali di interruzione (anche questa non `e riportata in fig. 11.7) che si limita a rimuovere dal filesystem la fifo usata dal server per comunicare.

Terminata l’inizializzazione ( 16) si effettua la chiamata alla funzioneFortuneParse che legge dal file specificato infortunefilename le primen frasi e le memorizza (allocando dinamicamente la memoria necessaria) nel vettore di puntatorifortune. Anche il codice della funzione non ` riportato, in quanto non direttamente attinente allo scopo dell’esempio.

Il passo successivo ( 17-22) `e quello di creare con mkfifo la fifo nota sulla quale il server ascolter`a le richieste, qualora si riscontri un errore il server uscir`a (escludendo ovviamente il caso in cui la funzionemkfifo fallisce per la precedente esistenza della fifo).

Una volta che si ` e certi che la fifo di ascolto esiste la procedura di inizializzazione `e completata. A questo punto si pu`o chiamare (23) la funzione daemon per far proseguire l’esecuzione del programma in background come demone. Si pu`o quindi procedere (24-33) alla apertura della fifo: si noti che questo viene fatto due volte, prima in lettura e poi in scrittura, per evitare di dover gestire all’interno del ciclo principale il caso in cui il server `e in ascolto ma non ci sono client che effettuano richieste. Si ricordi infatti che quando una fifo `e aperta solo dal capo in lettura, l’esecuzione diread ritorna con zero byte (si ha cio`e una condizione di end-of-file).

Nel nostro caso la prima apertura si bloccher` a fintanto che un qualunque client non apre a sua volta la fifo nota in scrittura per effettuare la sua richiesta. Pertanto all’inizio non ci sono problemi, il client per`o, una volta ricevuta la risposta, uscir`a, chiudendo tutti i file aperti, compresa la fifo. A questo punto il server resta (se non ci sono altri client che stanno effettuando richieste) con la fifo chiusa sul lato in lettura, ed in questo stato la funzioneread non si bloccher` in attesa di input, ma ritorner`a in continuazione, restituendo un end-of-file.10

Per questo motivo, dopo aver eseguito l’apertura in lettura ( 24-28),11 si esegue una seconda apertura in scrittura (29-32), scartando il relativo file descriptor, che non sar`a mai usato, in questo modo per`o la fifo resta comunque aperta anche in scrittura, cosicch´e le successive chiamate aread possono bloccarsi.

A questo punto si pu` o entrare nel ciclo principale del programma che fornisce le risposte ai client (34-50); questo viene eseguito indefinitamente (l’uscita del server viene effettuata inviando un segnale, in modo da passare attraverso la funzione di chiusura che cancella la fifo).

Il server ` e progettato per accettare come richieste dai client delle stringhe che contengono il nome della fifo sulla quale deve essere inviata la risposta.



scaricare



Disconoscimento:
Questo sito non memorizza alcun file sul suo server. Abbiamo solo indice e link                                                  contenuto fornito da altri siti. Contatta i fornitori di contenuti per rimuovere eventuali contenuti di copyright e inviaci un'email. Cancelleremo immediatamente i collegamenti o il contenuto pertinenti.