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> - 17 -<br />

/--PLUS--\ /------------- MAXS --------------\<br />

|lung| |s |<br />

|----|----------|xxxxxxxxxxxxxxxxxxxxxxxxxxxx|------|<br />

| |<br />

\ -------------- lung ----------------/<br />

lung este un intreg ce contine lungimea efectiva a continutului mesajului.<br />

Zona de PLUS octeti contine cativa intregi, depinde de tipul canalului pe care se comunica.<br />

s este un tablou de maximum MAXS caractere, aflat in partea finala a mesalului.<br />

Evident, in functie de natura problemei utilizatorul poate sa isi defineasca suprapuneri<br />

convenabile (union) in Mesaj.<br />

Sursa dir.cpp contine functia ce obtine lista fisierelor:<br />

Mesaj *dir(int l, char *s) {<br />

static Mesaj resp;<br />

WIN32_FIND_DATA d;<br />

char *p, *q, *n, dirc[] = ".\\*.*";<br />

int i;<br />

p = resp.s;<br />

resp.lung = 0;<br />

HANDLE hf = FindFirstFile(dirc, &d);<br />

for (i=0; i MAXS) break;<br />

i++;<br />

strcpy(p, n);<br />

resp.lung += strlen(n)+1;<br />

p += strlen(n)+1;<br />

}<br />

resp.lung += PLUS;<br />

return &resp;<br />

}<br />

Functia dir primeste intregul l si stringul s precizati in enuntul problemei "lista a maximum<br />

l nume de fisiere din directorul curent al caror nume se termina cu s".<br />

La terminare intoarce un pointer la un Mesaj care contine lista numelor.<br />

Mesajul contine in s succesiunea de stringuri (conventie C) cu numele fisierelor raspuns,<br />

iar lung suma lungimilor acestor stringuri (plus zerourile terminale), plus PLUS.<br />

Pentru comunicarea <strong>prin</strong> <strong>pipe</strong> cu nume structura mesajului este descrisa in sursa mesaj.h:<br />

#define MAXS 10000<br />

#define MAXL 1000<br />

typedef struct {<br />

int lung;<br />

int i;<br />

char s[MAXS];<br />

} Mesaj;<br />

#define PLUS (sizeof(int))<br />

Citirea / scrierea unui Mesaj la comunicarea <strong>prin</strong> <strong>pipe</strong> se face in doua etape:<br />

<strong>1.</strong> Se scrie / citeste lung.<br />

2. Se fac scrieri / citiri repetate, pana cand sunt schimbati toti octetii continutului<br />

mesajului.

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

Saved successfully!

Ooh no, something went wrong!