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

Raspunde prin e-mail lui