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 RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug