Re: close return value

Patrick J. LoPresti (patl@curl.com)
18 Jul 2002 10:42:25 -0400


Pete Zaitcev <zaitcev@redhat.com> writes:

> The problem with errors from close() is that NOTHING SMART can be
> done by the application when it receives it.

This is like saying "nothing smart" can be done when write() returns
ENOSPC. Such statements are either trivially true or blatantly false,
depending on what you mean by "smart".

Failures happen. They can happen on write(), they can happen on
close(), and they can happen on any system call for which the API
allows it. There is no difference! Your application either deals
with them and is correct or fails to deal with them and is broken.

If the API allows an error return, you *must* check for it, period.
This includes "impossible" errors. You may think it is impossible for
gettimeofday() to return an error in some case, but if it ever did,
you should darn well want to know about it right away.

If you are that convinced that close() can not return an error in your
particular application (e.g., because you "know" you are using a local
disk, or the file descriptor is read-only), then treat such errors
like assertion failures. Because that is what they are.

Checking system calls for errors, always, is fundamental to writing
reliable code. Failing to check them is shoddy and amateurish
programming. It is amazing that so many people would argue this
point. Then again, maybe not, given how bad most software is...

- Pat
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/