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