[linux] Re: Gezocht: Function GetLength(EventQueue)

Folkert van Heusden folkert op vanheusden.com
Zo mei 24 21:57:33 CEST 2009


> > >     NOTE! There is _not_ a way to query how much you could write to a pipe,
> > >     though. Although normally I think you should be able to rely on being able
> > >     to write PIPE_BUF characters if a poll() or select() says ?writable?. But
> > >     you may be able to write more.
> > 
> > Hmmm is een pipe non-blocking te maken? Dan zou je denk ik een EAGAIN
> > moeten krijgen als 't niet zou passen. In het EAGAIN geval zou ik het
> > aantal bytes halveren en nog eens proberen. Als je eerst mte select hebt
> > gekeken of ie writable is dan zal er uiteindelijk toch op z'n minst 1
> > byte te schrijven moeten zijn.
> Als het niet zou passen lijkt mij dat de kernel gewoon zoveel bytes zou
> kopieren als wel passen, en dat aangeven aan jou programma. EAGAIN
> krijg je pas als er echt geen ruimte meer is, zelfs voor een byte.

Weet je dat zeker? Want (man 7 pipe):

       O_NONBLOCK enabled, n <= PIPE_BUF
              If there is room to write n bytes to the pipe, then
write(2) succeeds immediately, writing all n bytes; otherwise write(2)
fails, with errno set to EAGAIN.

       O_NONBLOCK enabled, n > PIPE_BUF
              If  the pipe is full, then write(2) fails, with errno set
to EAGAIN.  Otherwise, from 1 to n bytes may be written (i.e., a
"partial write" may occur; the caller should check the return value from
write(2) to see how
              many bytes were actually written), and these bytes may be
interleaved with writes by other processes.



Folkert van Heusden

-- 
MultiTail cok yonlu kullanimli bir program, loglari okumak, verilen
kommandolari yerine getirebilen. Filter, renk verme, merge, 'diff-
view', vs.  http://www.vanheusden.com/multitail/
----------------------------------------------------------------------
Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com



More information about the Linux mailing list