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> - 28 -<br />
Sintaxa Descriere<br />
\\.\mailslot\numeMailslot Serverul mailslot de pe ma<strong>şi</strong>na locală<br />
\\adresaMasina\mailslot\numeMailslot Serverul mailslot de pe ma<strong>şi</strong>na având<br />
adresa specificată<br />
\\numeDomeniu\mailslot\numeMailslot Multicast spre toate serverele mailslot<br />
care fac parte din domeniul specificat<br />
\\*\mailslot\numeMailslot Broadcast spre toate serverele<br />
mailslot din reţeaua LAN<br />
Un server mailslot creează un obiect mailslot care citeste mesajele trimise de clienţi. Serverul<br />
<strong>şi</strong> clienţii se pot afla pe aceea<strong>şi</strong> ma<strong>şi</strong>nă (local) sau pot rula pe două ma<strong>şi</strong>ni diferite.<br />
Crearea unui server mailslot se face cu funcţia CreateMailslot. Stabilirea unui contact<br />
de către un client cu serverul - deschidere -de mailslot se face <strong>prin</strong> funcţia CreateFile.<br />
Citirea unui mesaj de către server se face <strong>prin</strong> funcţia ReadFile. Scrierea de către client a<br />
unui mesaj se face <strong>prin</strong> funcţia WriteFile.<br />
Inchiderea unui mailslot, atât la client cât <strong>şi</strong> la server se face folosind funcţia<br />
CloseHandle.<br />
In continuare, prezentăm prototipul funcţiei CreateMailslot.<br />
HANDLE CreateMailslot (LPCTSTR lpszName, DWORD cbMaxMsg,<br />
DWORD dwReadTimeout, LPSECURITY_ATTRIBUTES lpsa);<br />
lpszName– specifică numele mailslot indicând obligatoriu ma<strong>şi</strong>na locală, conform tabelului<br />
de mai sus.<br />
cbMaxMsg – indică dimensiunea maximă a mesajului în octeţi. Serverul poate primi unul<br />
sau mai multe mesaje, fiecare trebuind sã fie egal sau mai mic decât dimensiunea maximã<br />
specificatã. Nu existã limitã pentru numãrul de mesaje care se pot recepţiona. Serverul poate<br />
specifica NULL ca <strong>şi</strong> dimensiune maximã pentru a putea recepţiona mesaje de orice<br />
dimensiune acceptatã de sistem.<br />
dwReadTimeout – specificã, în milisecunde, perioada implicitã de time-out asociatã citirii<br />
unui mesaj din mailslot cand acesta este gol. Valoarea 0 inseamnã cã ReadFile se opreste<br />
imediat fãrã nici o eroare când mailslot-ul este vid. Valoarea<br />
MAILSLOT_WAIT_FOREVER asigurã serverul cã ReadFile nu se va bloca panã când<br />
este accesibil un mesaj. Dacã existã deja un mesaj în coada de mesaje atunci functia<br />
ReadFile se va executa imediat indiferent de valoarea dwReadTimeout.<br />
lpsa– permite asocierea unei variabile de tipul SECURITY_ATRIBUTES mailslot-ului.<br />
Astfel, serverul poate restricţiona accesul la mailslot. Specificând NULL ca <strong>şi</strong> atribut de<br />
securitate, se lasã în seama sistemului de operare.<br />
În urma apelului CreateMailslot() serverul obţine un handle către noul mailslot creat,<br />
pe care îl foloseste pentru a citi mesaje folosind funcţia ReadFile. Serverul specifică<br />
funcţiei handle-ul respectiv <strong>şi</strong> un buffer unde doreşte să recepţioneze mesajele.