The new std.process is ready for review

Steven Schveighoffer schveiguy at yahoo.com
Sat Mar 9 10:54:32 PST 2013


On Sat, 09 Mar 2013 13:44:44 -0500, Lars T. Kyllingstad  
<public at kyllingen.net> wrote:

> On Saturday, 9 March 2013 at 18:35:25 UTC, Steven Schveighoffer wrote:

>> How do you loop over all open ones?  Just curious :)
>
> You don't.  That is why I said solution (3) sucks too. :)  You have to  
> loop over all possible non-std file descriptors, i.e. from 3 to the  
> maximum number of open files.  (On my Ubuntu installation, this is by  
> default 1024, but may be as much as 4096.  I don't know about other  
> *NIXes)
>
> Here is how to do it:
>
> import core.sys.posix.unistd, core.sys.posix.sys.resource;
> rlimit r;
> getrlimit(RLIMIT_NOFILE, &r);
> for (int i = 0; i < r.rlim_cur; ++i)
>      close(i);

Hm... don't close 0, 1, 2 :)

On Linux at least, you could use /proc/self/fd  I suppose it's faster just  
to loop though.

How long does it take when you close non-open descriptors?  We don't want  
to hamper performance too much.

I wonder if select on all possible file descriptors in the fd_err  
parameter would give you a clue as to which were invalid.

-Steve


More information about the Digitalmars-d mailing list