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

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> - 15 -<br />

In figura următoare sunt prezentate succesiunile apelurilor sistem, atât pentru server, cât <strong>şi</strong><br />

pentru client. Cititorul poate uşor observa particularizările necesare pentru comunicarea <strong>prin</strong><br />

<strong>pipe</strong> anonim.<br />

<strong>1.</strong> C re at eN am ed Pi pe<br />

2. Co nn ec tN am ed Pi pe<br />

3. R ea dF il e<br />

4. W ri te Fi le<br />

5. D is co nn ec tN am ed Pi pe<br />

6. C lo se Ha nd le<br />

<strong>1.</strong> C re at eF il e<br />

2. R ea dF il e<br />

3. W ri te Fi le<br />

4. C lo se Ha nd le<br />

Server Client<br />

P ipe cu num e<br />

Crearea unui <strong>pipe</strong> cu nume se face <strong>prin</strong> apelul sistem CreateNamedPipe, cu prototipul:<br />

HANDLE CreateNamedPipe(LPSTR numePipe,<br />

DWORD optiuniModOpen,<br />

DWORD optiuniModPipe,<br />

DWORD nMaxInstances,<br />

DWORD lungBufOut,<br />

DWORD lungBufIn,<br />

DWORD timeOut,<br />

LPSECURITY_ATTRIBUTES lpsa)<br />

numePipe este un string <strong>prin</strong> care se indică numele <strong>pipe</strong>-ului. Convenţiile Microsoft de<br />

specificare a acestor nume impun două sintaxe, una pentru <strong>pipe</strong> local <strong>şi</strong> alta pentru <strong>pipe</strong> de pe<br />

o altă ma<strong>şi</strong>nă. Aceste specificări sunt:<br />

\\.\PIPE\numePipePeMAsina<br />

\\adresaMasina\PIPE\numePipePeMasina<br />

adresa ma<strong>şi</strong>nii este fie o specificare Internet, fie o adresă IP. Atenţie! In constantele string de<br />

specificare a acestor nume, fiecare caracter \ trebuie dublat, aşa cum cer regulile de evitare<br />

specifice limbajului C.<br />

optiuniModOpen specifică direcţia de deschidere a <strong>pipe</strong>-ului. Valoarea lui poate fi una<br />

dintre constantele: PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND,<br />

PIPE_ACCESS_OUTBOUND, indicând fie ambele sensuri, fie numai de la client la server,<br />

fie numai de la server spre client.<br />

optiuniModPipe precizează caracteristicile acestui <strong>pipe</strong>. Pentru specificare, se folosesc<br />

constante sau combinaţii legate între ele <strong>prin</strong> operatorul '|':<br />

� PIPE_TYPEBYTE, PIPE_TYPE_MESSAGE pentru scrierea ca flux de octeţi, respectiv<br />

ca <strong>şi</strong> mesaj;<br />

� PIPE_READMODE_BYTE, PIPE_READMODE_MESSAGE pentru citirea după<br />

regulile fluxului de octeţi sau citirea ca <strong>şi</strong> mesaj;<br />

� PIPE_WAIT, PIPE_NOWAIT pentru comunicarea sincronă, respectiv asincronă.<br />

nMaxInstances specifică numărul de clienţi care se vor conecta la acest <strong>pipe</strong>. La nevoie,<br />

se poate folosi constanta PIPE_UNLIMITED_INSTANCES.

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

Saved successfully!

Ooh no, something went wrong!