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.

    Motivul pentru care trebuie sa chemi pclose(3) e insa altul.  Un
pipe nu este complet sters decat in momentul in care ambele capete sunt
inchise.  Daca procesul de la unul din capete moare inainte de termen,
el devine zombie pana cand si celalalt proces inchide pipe-ul.  Trebuie
deci sa chemi pclose(3) indiferent daca ai primit SIGPIPE sau nu.

    Salutari,

    Liviu Daia

-- 
Dr. Liviu Daia                                  http://www.imar.ro/~daia

_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui