Serghei Amelian scria la data de 21 Ianuarie 2006: > On Saturday 21 January 2006 16:23, Liviu Daia wrote: > > Serghei Amelian scria la data de 21 Ianuarie 2006: > > > On Saturday 21 January 2006 13:37, Liviu Daia wrote: > > > [...] > > > > > > > Adevarat. In cazul popen(3) nu te poti baza decat pe un signal > > > > handler. > > > > > > Oare nu pot sa fac signal(SIGPIPE, SIG_IGN), dupa care sa verific > > > rezultatul dupa fiecare fwrite (sa abandonez functia daca > > > errno==EPIPE)? > > > > Ba da, chiar asa se face, cu mentiunea ca verifici rezultatul cu > > ferror(3). > > Nu abandonez operatia de scriere doar la "broken pipe" ci la orice alta > eroare. E suficient sa-mi dea fwrite() <= 0.
Rezultatul lui fwrite(3) poate fi > 0 si sa ai totusi o eroare. Trebuie sa faci testul cu ferror(3), dupa care te poti uita la errno ca sa afli ce s-a intamplat. Nu trebuie insa sa renunti la operatie la orice eroare, exemplul standard este errno == EINTR. > Singurul lucru care il fac e sa scriu la stderr "Error writing to > spooler: %s", strerror(errno) si vad ca e ok. > > > In felul asta nu poti sti exact cat din ultimul chunk pe care l-ai > > trimis a ajuns cu succes la destinatie, asta e singurul dezavantaj. > > In cazul meu nu conteaza cat s-a scris. Eu scriu un job la spooler, > care poate fi "lp", "lpr", "kprinter --stdin", etc. Cea mai frecventa > chestie e sa dai cancel la kprinter, care se soldeaza cu "broken > pipe". 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