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).
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:54 UTC