[so] [Tema1][Windows] Pipe-uri

Cosmin Stefan-Dobrin cosminstefanxp at gmail.com
Wed May 25 03:32:41 EEST 2011


Salutare,

Am si eu o mica problema cu pipe-urile pe Windows si nu reusesc sa-mi dau
seama ce are. Ei bine, ideea e ca pana acum totul ne merge bine, mai putin
cazul in care avem mai mult de 2 pipe-uri inlantuite. Daca avem: 'echo ana |
nl' totul e ok. In schimb daca avem 'echo ana | cat | nl', operatia o face
cu succes, dar nu se termina. Procesul lui echo se inchide, in schimb
celelalte 2 nu. Deci probabil ele inca mai asteapta ceva pe Pipe-uri, desi
eu zic ca le-am inchis cum trebuie (Altfel nu se termina nici pentru 2
pipe-uri).

Ideea e ca noi am folosit threaduri. Cand dam peste o comanda paralela, sunt
create doua threaduri, fiecare ocupandu-se de o jumate de arbore. In fiecare
moment fiecare thread (inclusiv cel principal) stie ce handle-uri are pentru
in/out/err. Initial acestea sunt stdin/out/err, dar atunci cand creez un
pipe, ii comunic thrreadului ca , de exemplu, out-ul lui e handle-ul cutare.
Threadul, dupa ce va crea procesul ce executa comanda, daca stie ca un cap e
pipe, il inchide.

Din codul de debug pe care il am se vede ca pe procesul parinte (cu
threaduri cu tot) se inchid toate cele 4 capete ale celor 2 pipe-uri create
(in cazul exemplului de mai sus), dar tot nu se inchid procesele spawn-uite.


Conteaza ordinea in care sunt inchise pipe-urile (atat timp cat sunt inchise
de thread dupe ce creaza procesul comenzii si inainte sa il astepte)?
Exista vreun flag necesar pentru a trimite pe pipe EOF cand se inchide
Handle-ul?

Thanks a lot,
Cosmin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20110525/91e481ad/attachment.htm>


More information about the so mailing list