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

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

Saved successfully!

Ooh no, something went wrong!