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