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> - 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.