Serghei Amelian scria la data de 21 Ianuarie 2006:
> On Saturday 21 January 2006 13:13, Liviu Daia wrote:
> > Serghei Amelian scria la data de 21 Ianuarie 2006:
> > > Deschid un pipe cu popen(). E posibil ca in timpul operatiilor de
> > > I/O sa dea un SIGPIPE. E nevoie sa mai inchid pipe-ul cu pclose()
> > > in cazul asta?
> >
> > Da.
> >
> > Background: SIGPIPE primesti cand procesul tau incearca sa scrie
> > intr-un capat al pipe-ului iar procesul de la celalt capat nu e
> > pregatit sa citeasca, fie pentru ca a murit, fie din alte motive.
> > In general trebuie sa eviti situatia asta instaland un handler
> > pentru SIGPIPE, si evitand sa scrii inainte sa te asiguri folosind
> > select(2) ca cealalta parte e pregatita.
>
> Hmm, pot sa combin select() cu popen()/fwrite()?
Nu. Explicatia mea a fost neclara: ce am spus mai sus se refera in
general la pipe-uri, nu la popen(3).
> Stiu ca pot sa aflu descriptorul cu fileno(), dar stiu ca nu se
> recomanda sa amesteci functiile din stdio cu cele low-level, gen
> open()/read()/write().
Adevarat. In cazul popen(3) nu te poti baza decat pe un signal
handler. Daca vrei un control mai fin (situatie intalnita la aproape
toate aplicatiile nebanale), ai nevoie de toata masinaria: trebuie sa
deschizi pipe-ul cu pipe(2), sa faci fork(2) / exec(3), sa instalezi
handler-e pentru SIGCHLD etc. si sa creezi o functie low-level care
scrie in pipe caracter cu caracter, chemand de fiecare data select(2),
poll(2) sau altceva echivalent.
Salutari,
Liviu Daia
--
Dr. Liviu Daia http://www.imar.ro/~daia
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug