Вопрос о функции C fopen - PullRequest
       9

Вопрос о функции C fopen

2 голосов
/ 11 февраля 2010

Когда я читал ссылку на функцию fopen, я обнаружил, что FOPEN_MAX - это значение «минимального количества потоков, которое, как гарантирует реализация, может быть открыто одновременно».

Почему это минимальное количество потоков? Разве это не должно быть "максимальное количество потоков ...."?

Ответы [ 4 ]

10 голосов
/ 11 февраля 2010

Минимальное количество потоков, которые могут быть открыты = гарантия, что по крайней мере так много может быть открыто

Максимальное количество потоков, которое может быть открыто = гарантия того, что открытие больше не приведет к ошибке

Что означает формулировка, что если у вас открыто менее FOPEN_MAX потоков, гарантируется, что по крайней мере еще один может быть открыт, и система не обязательно обеспечивает какой-либо жесткий максимум

3 голосов
/ 11 февраля 2010

Звучит нелогично, что что-то "МАКС" - это число минимум , которое можно открыть одновременно.Но если вы пишете переносимый код, то это число максимум , которое вы можете безопасно использовать.

Рассмотрите этот код:

if (num_open >= FOPEN_MIN) {
    // close some old ones
}

Выглядит странно, верно?Так что называть это FOPEN_MAX имеет смысл.

1 голос
/ 11 февраля 2010

Плохая формулировка на мой взгляд. Было бы лучше просто сказать, что реализация гарантирует, что по крайней мере потоки FOPEN_MAX могут быть открыты одновременно. Обратите внимание, что если вы попытаетесь открыть больше потоков, у вас может получиться, но это не гарантировано заранее.

0 голосов
/ 11 февраля 2010

в Linux вы можете настроить максимальное количество разрешенных дескрипторов открытых файлов.
Смотрите команду ulimit для получения дополнительной информации:

Например, на моем компьютере, работающем под моим пользователем, сейчас любой процесс может иметь максимальное количество 256 дескрипторов файлов, открытых в любой момент времени.

$ ulimit -n
256

см. Справочную страницу для ulimit для получения дополнительной информации (здесь веб-версия): http://ss64.com/bash/ulimit.html

Тем не менее, я думаю, что вы не можете опустить его ниже FOPEN_MAX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...