[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] Ammount of file descriptors per process
Hello!
2. Opening files using library call open(), the maximum ammount of files it
tries to open is taken from RLIMIT_NOFILE library constant.
This is not a constant, this is a dynamic per process resource limit. And
this number don't represent the number of descriptors a process can open:
RLIMIT_NOFILE
This is a number one greater than the maximum value that the system
may assign to a newly-created descriptor. If this limit is exceeded,
functions that allocate new file descriptors may fail with errno set
to [EMFILE]. This limit constrains the number of file descriptors
that a process may allocate.
3. Opening (creating) files using system call Fcreate(), the maximum ammount
of files it tries to open is taken from Sysconf(SYS_MAXFILES) system call.
* Sysconf(which): returns information about system configuration.
* 2 max. number of open files per process {OPEN_MAX}
Ad 3. Sysconf(SYS_MAXFILES) returns 32. Test fails after opening 26 files.
This is not the number of files you can open, this is the maximum number
of files a process can have open. Under Unix every process have at least 3
open file descriptors at start (stdin, stdout, stderr). Under FreeMiNT
it's more due to TOS emulation.
Conclusions:
At the beginning _process_that_does_nothing_ has 9 file descriptors opened
(according to /kerm/*/fd). If 32 is a maximum ammount of file descriptors per
process, then 26 + 9 = 35, so there is something wrong here.
On the other hand FOPEN_MAX is wrong, and can lead to hard to trace errors in
ported software.
Or, if I'm wrong please correct me.
Except the FOPEN_MAX constant I don't see any problem or violation of the
standards.
Regards,
Frank
--
ATARI FALCON 060 // MILAN 060
-----------------------------------------
http://www.cs.uni-magdeburg.de/~fnaumann/
e-Mail: fnaumann@freemint.de