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.
}<br />
<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 13 -<br />
p = strstr(p, " ");<br />
if (p == NULL) break;<br />
p++;<br />
if (*p == '\n') break;<br />
*p = toupper(*p);<br />
}<br />
f<strong>prin</strong>tf(fo, "%s", linie);<br />
}<br />
fclose(fo);<br />
fclose(fi);<br />
Programul primeste la linia de comanda numele celor doua fisiere. Se deschid aceste fisiere si<br />
se citeste fisierul de intrare linie cu linie. Cu ajutorul pointerului p, se parcurge linia curenta<br />
si se cauta pe rand cate un spatiu, dar care sa nu fie ultimul caracter din linie. Urmatorul<br />
caracter este apoi transformat in litera mare (toupper face aceasta transformare numai daca<br />
caracterul este efectiv o litera mica).<br />
Sursa master.cpp este:<br />
#include <br />
#include <br />
main(int argc, char* argv[]) {<br />
STARTUPINFO si = { sizeof(si) };<br />
PROCESS_INFORMATION pi[100];<br />
int i;<br />
char nume[200];<br />
for (i=1; argv[i]; i++) {<br />
strcpy(nume, "capitalizare ");<br />
strcat(nume, argv[i]);<br />
strcat(nume, " ");<br />
strcat(nume, argv[i]);<br />
strcat(nume, ".CAPIT"); // fabricat numele iesirii<br />
// incarcat programul de capitalizare<br />
BOOL b = CreateProcess("capitalizare.exe", nume, NULL, NULL,<br />
FALSE, 0, NULL, NULL, &si, &pi[i]);<br />
}<br />
<strong>prin</strong>tf("Lansat simultan %d procese de capitalizare\n",i-1);<br />
}<br />
Se parcurg argumentele liniei de comanda si pentru fiecare dintre ele se creeaza un proces fiu.<br />
In tabloul nume se construieste numele fisierului de iesire. Apoi se incarca programul<br />
capitalizare cu cele doua nume de fisiere date "la linia de comanda".<br />
Cele doua programe se compileaza:<br />
gcc -o capitalizare capitalizare.c<br />
gcc -o master master.c<br />
Lansarea se face:<br />
master fis1 fis2 - - - fisn<br />
<strong>1.</strong>4. Pipe sub <strong>Windows</strong><br />
În <strong>Windows</strong> există două posibilităţi de a folosi <strong>pipe</strong> în <strong>IPC</strong>. O primă variantă este <strong>pipe</strong><br />
anonime, care se pot folosi numai pentru comunicarea între procese de pe aceea<strong>şi</strong> ma<strong>şi</strong>nă. A