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
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 16 -<br />
lungBufOut <strong>şi</strong> lungBufIn specifică dimensiunile bufferelor, pentru ie<strong>şi</strong>re <strong>şi</strong> intrare.<br />
Sistemul ia aceste numere doar ca sugestii, în funcţie de context el putând să redimensioneze<br />
aceste buffere.<br />
timeOut indică, în milisecunde, durata maximă de aşteptare.<br />
lpsa specifică atributele de securitate. De cele mai multe ori se specifică NULL, lăsând<br />
astfel pe seama sistemului fixarea acestora.<br />
Apelul sistem întoarce un handle, care va fi folosit ca <strong>şi</strong> argument în celelalte apeluri sistem<br />
legate de <strong>pipe</strong>.<br />
După crearea unui <strong>pipe</strong> cu nume, serverul apelează:<br />
ConnectNamedPipe(HANDLE hNamedPipe, LPOVERLAPPED lpo)<br />
Primul handle este cel întors de crearea <strong>pipe</strong>. Al doilea parametru, de regulă NULL, indică<br />
faptul că se aşteaptă la conectare până când un client se conectează efectiv la <strong>pipe</strong>. (A se<br />
compara această regulă cu cea similară de la FIFO de sub Unix).<br />
La fel ca <strong>şi</strong> la <strong>pipe</strong> anonime, se folosesc apelurile ReadFile <strong>şi</strong> WriteFile pentru<br />
schimbul cu <strong>pipe</strong>.<br />
Serverul î<strong>şi</strong> încheie activitatea apelând:<br />
DisconnectNamedPipe(HANDLE hNamedPipe);<br />
CloseHandle (HANDLE hNamedPipe);<br />
Pentru client, conectarea la un <strong>pipe</strong> cu nume presupune un apel sistem CreateFile:<br />
In cazul creării unui <strong>pipe</strong> cu nume, numeFisier reprezintă numele <strong>pipe</strong>-ului, cu sintaxa<br />
specificată mai sus, la apelul CreateNamedPipe.<br />
<strong>1.</strong>4.3. Exemplul 7: lista de fisiere cu nume de anumita forma; implementare<br />
<strong>pipe</strong> cu nume<br />
Enuntul problemei este: Se cere un server si un client. Clientul trimite serverului un intreg l si<br />
un string s. Serverul ii intoarce clientului lista a maximum l fisiere din directorul lui curent,<br />
ale caror nume se termina cu stringul s.<br />
Vom descrie implementarea separat pe functionalitati. Pentru fiecare functionalitate am<br />
intocmit o sursa separata.<br />
Mai intai vom construi o functie cu rolul de a furniza lista numelor de fisiere:<br />
Vom descrie mai intai tipul de date Mesaj. El va diferi de la un tip de canal la altul, insa<br />
pentru functiile de mai sus aceasta diferenta nu le va influenta raspunsurile.<br />
Structura Mesaj este: