LINUX.ORG.RU

FOPEN_MAX и thread safety


0

0

FOPEN_MAX из stdio -- что за странный параметр такой? Согласно описанию glibc, его быть вообще не должно:

In POSIX.1 systems this value is determined by the OPEN_MAX parameter

Я никогда на него внимания не обращал. Но сейчас мой коллега что-то напортачил с тредами и уверяет, что дело именно в нем: как только он открывает файлов больше, чем FOPEN_MAX, все грохается.

Any comments?

★★★★★

>In POSIX.1 systems this value is determined by the OPEN_MAX parameter

следующее за этим предложение: In BSD and GNU, it is controlled by the RLIMIT_NOFILE resource limit; see section 22.2 Limiting Resource Usage.

The maximum number of files that the process can open. If it tries to open more files than this, its open attempt fails with errno EMFILE. See section 2.2 Error Codes. Not all systems support this limit; GNU does, and 4.4 BSD does.

чё бы и не грохаться? :)

Pi ★★★★★
()
Ответ на: комментарий от Pi

Дык, то-то и оно, настоящий предел регулируется вовсе не этой странной макрой. А к чиму она тогода вообще отношение имеет?

> чё бы и не грохаться? :)

Дык, все нормально открывается. Потом какие-то райсы происходят.

Die-Hard ★★★★★
() автор топика
Ответ на: комментарий от Die-Hard

Есть подозрение, что это - размер пула для аллокации структур FILE, или что-нибудь в этом роде. Т.е. это ограничитель количества стандартных стримов, а не открытых файлов. У меня на FC4 оно 16.

http://www.delorie.com/gnu/docs/glibc/libc_179.html

Macro: int FOPEN_MAX The value of this macro is an integer constant expression that represents the minimum number of streams that the implementation guarantees can be open simultaneously. You might be able to open more than this many streams, but that is not guaranteed. The value of this constant is at least eight, which includes the three standard streams stdin, stdout, and stderr. In POSIX.1 systems this value is determined by the OPEN_MAX parameter; see section 31.1 General Capacity Limits. In BSD and GNU, it is controlled by the RLIMIT_NOFILE resource limit; see section 22.2 Limiting Resource Usage.

anonymous
()
Ответ на: комментарий от Die-Hard

>А к чиму она тогода вообще отношение имеет?
она имеет отношение к C стандарту :)
>Дык, то-то и оно, настоящий предел регулируется вовсе не этой странной макрой.
В man sysconf(3) сказано про posixовый STREAM_MAX:
STREAM_MAX - _SC_STREAM_MAX
The maximum number of streams
that a process can have open at any time.
If defined, it has the same value
as the standard C macro FOPEN_MAX.
Must not be less than _POSIX_STREAM_MAX (8).

hyde
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.