_cleanup() vs Linux fcloseall()

Kostik Belousov kostikbel at gmail.com
Thu Mar 30 08:39:15 UTC 2006


On Thu, Mar 30, 2006 at 07:16:19PM +1100, Peter Jeremy wrote:
> On Thu, 2006-Mar-30 00:41:00 +0200, Maxime Henrion wrote:
> >John Baldwin wrote:
> >> I would vote for fcloseall() personally.
> >
> >Seconded.
> 
> I'd prefer to see a function that closed all file descriptors greater
> than a specified limit (which makes it easy for a process to preserve
> stdin/out/err but close everything else).  Two obvious places for this
> would be:
> - At the beginning of a setuid program (making sure that the user hasn't
>   passed in any unexpected open FDs).
> - Before an exec() to prevent fd's leaking into a child.
> 
> >Does fcloseall() really closes all the open file descriptors?  The name
> >suggests that it will close all the FILE * streams instead, which is not
> >quite the same.  The manpage I found on the net seems to confirm this
> >indirectly by saying that fflush() is used prior to closing the streams.
> 
> Something that just closed all stdio FILE streams would be far less
> useful (close to totally useless IMHO) than something that closed file
> descriptors.
> 
> >FWIW, NetBSD has something that close all the file descriptors, and it's
> >done with fcntl(fd, F_CLOSEM) (using fcntl() on one file descriptor to
> >close all of them looks a bit weird to me, but well...).
> 
> If it close any fd's numerically greater than the passed fd, that would
> make a lot of sense.

According to fcntl(2) manpage from the netbsd, this is exactly the
functionality of F_CLOSEM. FreeBSD already has a way to close all
file descriptors: rfork(RFCFDG).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-current/attachments/20060330/c36b640e/attachment.pgp


More information about the freebsd-current mailing list