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.

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

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

Saved successfully!

Ooh no, something went wrong!