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> - 7 -<br />
Cea mai simplă dintre aceste funcţii <strong>şi</strong> cea mai des utilizată este WaitForSingleObject,<br />
al cărei prototip îl vom prezenta <strong>şi</strong> pe care o vom utiliza <strong>şi</strong> noi în secţiunile următoare. Pentru<br />
detalii privind celelalte funcţii recomandaconsultarea MSDN.<br />
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMillisec);<br />
hHandle -handler-ul obiectului la care se aşteaptă<br />
dwMillisec -intervalul de timp maxim de aşteptare. Valoarea INFINITE indică aşteptare<br />
până la semnalarea obiectului.<br />
Funcţia poate să întoarcă următoarele valori:<br />
� WAIT_ABANDONED -dacă obiectul nu a fost eliberat de threadul său proprietar înainte<br />
ca apelul să se termine<br />
� WAIT_OBJECT_O -dacă obiectul a fost semnalat<br />
� WAIT_TIMEOUT -dacă intervalul de timp a expirat<br />
<strong>1.</strong>3. Lucrul cu procese sub <strong>Windows</strong><br />
<strong>1.</strong>3.<strong>1.</strong> Crearea unui proces<br />
Crearea unui proces în <strong>Windows</strong> se face <strong>prin</strong> apelul funcţiei CreateProcess dintr-un alt<br />
proces. Funcţia are următorul prototip:<br />
BOOL CreateProcess (LPCTSTR lpszImageName,<br />
LPCTSTR lpszCommandLine,<br />
LPSECURITY_ATTRIBUTES lpsaProcess,<br />
LPSECURITY_ATTRIBUTES lpsaThread,<br />
BOOL fInheritHandles,<br />
DWORD fdwCreate,<br />
LPVOID lpvEnvironment,<br />
LPTSTR lpszCurDir,<br />
LPSTARTUPINFO lpsiStartInfo,<br />
LPPROCESS_INFORMATION lppiProcInfo);<br />
Atunci când se apelează funcţia CreateProcess, sistemul creează un spaţiu de adresare <strong>şi</strong><br />
încarcă noul proces în acest spaţiu. După această operaţie, sistemul creează threadul primar<br />
pentru noul proces <strong>şi</strong>-l lansează în execuţie. Să vedem semnificaţia parametrilor funcţiei<br />
CreateProcess:<br />
lpszImageName - parametrul identifică numele fi<strong>şi</strong>erului executabil în care este memorat<br />
codul pentru procesul ce se va crea. CreateProcess va căuta fi<strong>şi</strong>erul mai întâi în directorul<br />
curent, <strong>şi</strong> apoi în directoarele descrise de variabila de mediu PATH. Dacă acest parametru<br />
este NULL, funcţia va lua numele fi<strong>şi</strong>erului din primul cuvânt al liniei de comandă<br />
specificată de parametrul lpszCommandLine.<br />
lpszCommandLine - parametrul specifică argumentele care trebuie transmise către noul<br />
proces. La pornirea procesului, aceste argumente vor fi regăsite în argumentul<br />
lpszCmdLine al funcţiei WinMain. lpszCommandLine punctează către un sir de<br />
caractere ANSI.