28.01.2013 Views

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

SHOW MORE
SHOW LESS

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:

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

Saved successfully!

Ooh no, something went wrong!