31.05.2013 Views

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

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.

Assumendo che il processo figlio conosca quali handle siano condivisi, il padre ed il figlio<br />

possono realizzare la comunicazione tra processi tramite gli oggetti condivisi. Nell'esempio di<br />

Figura 11, il processo figlio ottiene il valore di handle dal primo argomento della riga di comando e<br />

poi condivide il semaforo con il processo padre.<br />

<strong>Il</strong> secondo modo di condividere gli oggetti è che un processo assegni all'oggetto un nome al<br />

momento della creazione, e che il secondo processo apra il nome. Questo metodo ha due svantaggi:<br />

<strong>Windows</strong> <strong>XP</strong> non fornisce un modo per controllare se un oggetto con il nome scelto esiste già,<br />

dato che lo spazio dei nomi degli oggetti è globale, senza aver cura del tipo di oggetto. Per esempio,<br />

due applicazioni possono creare un oggetto chiamato pipe, ma si desiderano due oggetti distinti, e,<br />

possibilmente differenti.<br />

Gli oggetti con nome hanno il vantaggio che processi indipendenti possono prontamente<br />

condividerli; il primo processo chiama una delle funzioni CreateXXX e fornisce un nome nel<br />

parametro lpszName. <strong>Il</strong> secondo processo ottiene un handle per condividere l'oggetto<br />

chiamando OpenXXX (o CreateXXX) con lo stesso nome, come mostrato nell'esempio di<br />

Figura 12.<br />

//processo A<br />

…<br />

Handle_a_semaphore = CreateSemaphore(NULL,1,1,"MySEM1");<br />

…<br />

//processo B<br />

…<br />

Handle_b_semaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS,<br />

FALSE, "MySEM1");<br />

…<br />

Figura 12. Codice per condividere un oggetto dando uno sguardo al nome.<br />

<strong>Il</strong> terzo modo di condividere gli oggetti è tramite la funzione DuplicateHandle; questo<br />

metodo richiede qualche meccanismo di comunicazione tra processi per passare l’handle duplicato.<br />

Una volta assegnato un handle ad un processo ed il valore di un handle entro quel processo, un<br />

secondo processo può ottenere un handle dello stesso oggetto e quindi condividerlo. Un esempio di<br />

questo metodo è mostrato in Figura 13.<br />

…<br />

//<strong>Il</strong> processo A vuole permettere al processo B<br />

l’accesso ad un semaforo<br />

//processo A<br />

Handle_a_semaphore = CreateSemaphore(NULL,1,1,NULL);<br />

//invia il valore del semaforo al processo B<br />

//usa un messaggio o la memoria condivisa<br />

…<br />

//processo B<br />

53

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

Saved successfully!

Ooh no, something went wrong!