> The following program:
>
> module Main(main) where
> main:: IO()
> main = do {
> xs <- mapM readFile (take 1000 (repeat "tmp"));
> return ();
> }
>
> Results in the error:
>
> Fail: resource exhausted
> Action: openFile
> Reason: process file table full tmp
That looks reasonable - there's usually some kind of limit on the number of
files a process may have open, for example it's 1024 on our Linux box, and
64 on our Sparc box. The limits come from various places: there's a soft
limit which is setable by the user, a hard limit which can only be changed
by root, and sometimes an upper limit imposed by bogus OS design :-)
Try typing 'ulimit -a' at your shell prompt. Here's what I get on our Sparc
box:
~ > ulimit -a
core file size (blocks) unlimited
data seg size (kbytes) unlimited
file size (blocks) unlimited
open files 64
pipe size (512 bytes) 10
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 3909
virtual memory (kbytes) unlimited
Cheers,
Simon