write(2) takes > 17 seconds even with O_NONBLOCK

Dan Nelson dnelson at allantgroup.com
Sun Dec 17 14:04:53 PST 2006


In the last episode (Dec 17), Dieter said:
> I've always thought that writing to a file descriptor with O_NONBLOCK
> set was supposed to return quickly.  Isn't that the whole point of
> O_NONBLOCK ?
> 
> I have a C program writing to stdout, which is set to O_NONBLOCK, and
> the shell redirects stdout to a regular disk file.  Dispite
> O_NONBLOCK, my program reports that a write call took 17.701340
> seconds.

"non-blocking" really only applies to sockets or pipes, and means "I
have at least one free byte in my outbound buffer".  Files don't have
buffers and are always writable.  There is no guarantee on how long the
write will take, however.

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-questions mailing list