Date: Mon, 08 Dec 1997 19:45:05 -0500 From: Bakul Shah <bakul@torrentnet.com> To: Luigi Rizzo <luigi@labinfo.iet.unipi.it> Cc: hackers@freebsd.org Subject: Re: Why FIONREAD has no dual for write ? Message-ID: <199712090045.TAA06826@chai.torrentnet.com> In-Reply-To: Your message of "Mon, 08 Dec 1997 20:45:09 %2B0100." <199712081945.UAA29200@labinfo.iet.unipi.it>
next in thread | previous in thread | raw e-mail | index | archive | help
> I agree with the above, except that it does not work in all situations. > E.g. I am not sure but does select() guarantee that you don't > end up writing/reading one byte at a time ? I know in practice things > are different, but there is no standard behaviour I think, so the risk > is still there. In the audio driver I had to modify the behaviour of > select() (block size) using a separate ioctl(). Perhaps one solution is to add an ioctl to set high/low watermarks on a device and add new event bits POLLIN_WM and POLLLOUT_WM for the poll() syscall. In pollfd->events you set these bits instead of (or in addition to) POLLIN/POLLOUT. On return the corresponding bit in pollfd->revents is set only if there are _greater than low watermark_ bytes on input and _less than high watermark_ bytes on output. This guarantees that you can transfer some minimum number of bytes on read/write (provided you use the O_EXCL mode). This is a more general solution that allows finer control over when to schedule IO and is useful in all sorts of situations. > Plus there are apps which want only to check the status of the queue in > a descriptor without actually doing the I/O, for whatever reason they > like. This can be handled by POLL{IN,OUT}_WM. Comments? -- bakul
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712090045.TAA06826>