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

#include <br />

#include <br />

main(int argc, char* argv[]) {<br />

int n1, n2;<br />

n1 = atoi(argv[1]); // atoi intoarce 0<br />

n2 = atoi(argv[2]); // si la nenumeric<br />

if (n1 == 0 || n2 == 0) ExitProcess(2);<br />

if ((n1 + n2) % 2 == 0) ExitProcess(0);<br />

else ExitProcess(1);<br />

}<br />

Acesta va fi compilat cu:<br />

gcc -o paritateFiu paritateFiu.cpp<br />

Sursa paritate.cpp este:<br />

#include <br />

#include <br />

main(int argc, char* argv[]) {<br />

STARTUPINFO si = { sizeof(si) };<br />

PROCESS_INFORMATION pi[100];<br />

char linieCom[1000];<br />

int pare = 0, impare = 0, nenum = 0, i;<br />

DWORD n1;<br />

for (i = 1; i < argc-1; i += 2) {<br />

strcpy(linieCom, "paritateFiu.exe ");<br />

strcat(linieCom, argv[i]);<br />

strcat(linieCom, " ");<br />

strcat(linieCom, argv[i+1]);<br />

BOOL b = CreateProcess("paritateFiu.exe", linieCom, NULL, NULL,<br />

FALSE, 0, NULL, NULL, &si, &pi[i]);<br />

}<br />

// Parintele asteapta terminarile fiilor<br />

for (i = 1; i < argc-1; i += 2) {<br />

WaitForSingleObject(pi[i].hProcess, INFINITE);<br />

GetExitCodeThread(pi[i].hThread, &n1);<br />

switch (n1) {<br />

case 0: pare++;break;<br />

case 1: impare++;break;<br />

default: nenum++;<br />

}<br />

}<br />

<strong>prin</strong>tf("Pare %d, impare %d, nenumerice %d\n",pare, impare, nenum);<br />

}<br />

<strong>1.</strong>3.3.3. Exemplul 5: Un program care compileaza si ruleaza alt program.<br />

Sursa compilerun.cpp a acestuia este:<br />

#include <br />

#include <br />

main(int argc, char* argv[]) {<br />

STARTUPINFO si = { sizeof(si) };<br />

PROCESS_INFORMATION pi;<br />

char com[200];<br />

strcpy(com, "gcc -o ceva "); // fabricat comanda<br />

strcat(com, argv[1]);<br />

if (system(com) == 0)

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

Saved successfully!

Ooh no, something went wrong!