1. Procese Windows; comunicaţii prin pipe şi IPC 2
1. Procese Windows; comunicaţii prin pipe şi IPC 2
1. Procese Windows; comunicaţii prin pipe şi IPC 2
- TAGS
- procese
- pipe
- www.cs.ubbcluj.ro
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 14 -<br />
doua variantă este <strong>pipe</strong> cu nume, folosite pentru comunicarea între procese ce operează nu<br />
neapărat pe aceea<strong>şi</strong> ma<strong>şi</strong>nă <strong>Windows</strong>.<br />
<strong>1.</strong>4.<strong>1.</strong> Pipe anonim <strong>Windows</strong><br />
Ne vom ocupa mai întâi de <strong>pipe</strong> anonime, ca <strong>şi</strong> mecanism <strong>IPC</strong> în programarea concurentă sub<br />
<strong>Windows</strong>. Un <strong>pipe</strong> anonim poate fi folosit, ca <strong>şi</strong> <strong>pipe</strong>-ul de sub Unix, pentru comunicarea<br />
între procese descendente din creatorul <strong>pipe</strong>-ului. In urma creării, procesul creator obţine doi<br />
descriptori - handle - unul de citire <strong>şi</strong> altul de scriere. Procesul creator poate trimite fiilor<br />
(nepoţilor etc.) handle-urile <strong>pipe</strong>-ului, în momentul creării proceselor fii <strong>prin</strong> apeluri ale<br />
funcţiei CreateProces. Pentru ca fiul să moştenească handle-ul la <strong>pipe</strong>, părintele trebuie<br />
să seteze parametrul fInheritedHandle din apelul CreateProces, la valoarea TRUE.<br />
Un <strong>pipe</strong> fără nume se creează folosind apelul CreatePipe. Pipe-ul se închide cu ajutorul<br />
funcţiei CloseHandle. Funcţia CreatePipe creează un <strong>pipe</strong> fară nume <strong>şi</strong> are următorul<br />
prototip:<br />
BOOL CreatePipe (PHANDLE phRead,PHANDLE phWrite,<br />
LPSECURITY_ATTRIBUTES lpsa, DWORD cbPipe);<br />
Funcţia întoarce TRUE în caz de succes sau FALSE la eşec.<br />
phRead <strong>şi</strong> phWrite sunt pointerii spre cele două handle-uri (de citire <strong>şi</strong> de scriere) obţinute<br />
în urma creării.<br />
parametrul lpsa are o dublă semnficaţie: determină dacă handle-ul la <strong>pipe</strong>, returnat de<br />
funcţie poate fi moştenit în procesele fii, proprietate care are loc pentru o valoare diferită de<br />
NULL. Acela<strong>şi</strong> parametru reprezintă un descriptor de securitate. Dacă se specifică pentru<br />
acest parametru valoarea NULL, sistemul va fixa atributele de securitate implicite<br />
cbPipe specifică dimensiunea buferului rezervat pentru operaţiile de I/O <strong>prin</strong> <strong>pipe</strong>. Dacă<br />
această valoare este 0, atunci dimensiunea implicită a buferului o stabileşte sistemul de<br />
operare.<br />
Scrierea <strong>şi</strong> citirea din <strong>pipe</strong>urile anonime se face folosind funcţiile ReadFile <strong>şi</strong><br />
WriteFile, similare cu read <strong>şi</strong> write de sub Unix. Operaţiile sunt atomice. O citire va opri<br />
procesul până când va reu<strong>şi</strong> să se execute. In mod similar, o scriere va bloca procesul până<br />
când va avea suficient spaţiu în <strong>pipe</strong> pentru efectua operaţia de scriere dorită.<br />
Atât procesul creator, cât <strong>şi</strong> procesele fii care moştenesc cele două handle-uri ale <strong>pipe</strong>-ului, le<br />
pot folosi între momentul primirii lor <strong>şi</strong> momentul închiderii. Astfel, procesul creator poate<br />
începe imediat să folosească <strong>pipe</strong> <strong>prin</strong> apelurile ReadFile <strong>şi</strong> WriteFile. După creare <strong>şi</strong><br />
primirea handle-urilor, procesele fii pot să folosească la rândul lor funcţiile ReadFile <strong>şi</strong><br />
WrieFile pentru a citi sau scrie din <strong>pipe</strong>.<br />
<strong>1.</strong>4.2. Pipe cu nume sub windows<br />
Pipe cu nume este un mecanism de comunicare între două sisteme diferite, ambele fiind<br />
operaţionale pe platforme <strong>Windows</strong>