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.
}<br />
}<br />
}<br />
<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 31 -<br />
i += strlen(pc) + 1;<br />
pc += strlen(pc) + 1;<br />
Fata de sursa corespondenta din exemplul de mai sus, aici apare in plus un parametru si<br />
atribuirea <strong>prin</strong> care este depus in mesaj.<br />
In sfarsit vom prezenta programele <strong>prin</strong>cipale. Sursa programului <strong>prin</strong>cipal al serverului este<br />
data in msgs.cpp<br />
#include <br />
#include <br />
#include "msgmesaj.h"<br />
#include "ReadWrite.cpp"<br />
#include "dir.cpp"<br />
#include "msgparinte.cpp"<br />
main() {<br />
HANDLE f1;<br />
fclose(stdin);<br />
fclose(stdout);<br />
f1 = CreateMailslot("\\\\.\\mailslot\\f2p", sizeof(Mesaj),<br />
MAILSLOT_WAIT_FOREVER, NULL);<br />
parinte(f1);<br />
// Prin specificul problemei noastre cuncrete, nu se va ajunge la<br />
// instructiunile de mai jos. Le scriem totusi pentru exemplificare.<br />
CloseHandle(f1);<br />
}<br />
Se creeaza mailslotul pentru cereri dupa care se apeleaza functia parinte. Sursa programului<br />
<strong>prin</strong>cipal al clientului este data in msgc.cpp<br />
#include <br />
#include <br />
#include "msgmesaj.h"<br />
#include "ReadWrite.cpp"<br />
#include "fiu.cpp"<br />
main() {<br />
HANDLE f1, f2;<br />
long pid = GetCurrentProcessId();<br />
char nume[100];<br />
f2 = CreateFile("\\\\.\\mailslot\\f2p", GENERIC_WRITE,<br />
FILE_SHARE_WRITE|FILE_SHARE_READ,<br />
NULL, OPEN_EXISTING, 0, NULL);<br />
s<strong>prin</strong>tf(nume, "\\\\.\\mailslot\\p2f%d", pid);<br />
f1 = CreateMailslot(nume, sizeof(Mesaj),<br />
MAILSLOT_WAIT_FOREVER, NULL);<br />
fiu(f1, f2, pid);<br />
CloseHandle(f1);<br />
CloseHandle(f2);<br />
}<br />
Aici se creeaza mai intai fisierul de acces la mailslotul de cereri. Apoi se creeaza un mailslot<br />
propriu, <strong>prin</strong> intermediul caruia serverul ii trimite raspunsul la cerere. Dupa cum se poate<br />
vedea din sursele msgc.cpp, msgs.cpp si msgparinte.cpp, se fac mai intai<br />
creerile legate de mailslotul de cereri (al serverului aplicatiei), apoi cele ale mailslotului<br />
propriu al clientului <strong>prin</strong> care primeste raspunsul. A se revedea observatia facuta mai sus<br />
pentru cazurile cand se folosesc mai multe mailsloturi.<br />
In final iata cateva executii: