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.

}<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:

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

Saved successfully!

Ooh no, something went wrong!