Сколько файлов я могу открыть одновременно? - PullRequest
5 голосов
/ 11 марта 2010

В типичной ОС, сколько файлов я могу открыть одновременно с помощью стандартного ввода-вывода диска C?

Я пытался прочитать некоторую константу, которая должна это сказать, но в Windows XP 32 бит это была жалкая цифра 20 или что-то вроде Казалось, что он отлично работает с более чем 30, но я не тестировал его всесторонне.

Мне нужно одновременно открыть максимум 400 файлов, поэтому, если бы большинство современных ОС поддерживали это, это было бы здорово. Он не должен поддерживать XP, но должен поддерживать Linux, Win7 и последние версии сервера Windows.

Альтернатива - написать свою собственную мини файловую систему, которую я хочу избежать, если это возможно.

Ответы [ 3 ]

3 голосов
/ 11 марта 2010

Процесс может запросить ограничение с помощью системного вызова getrlimit.

#include<sys/resource.h>
struct rlimit rlim;
getrlimit(RLIMIT_NOFILE, &rlim);
printf("Max number of open files: %d\n", rlim.rlim_cur-1);
2 голосов
/ 11 марта 2010

В Linux это зависит от количества доступных файловых дескрипторов. Вы можете использовать ulimit -n, чтобы установить / показать количество доступных FD на оболочку.

См. Эти инструкции о том, как проверить (или изменить) значение доступных общих FD: s в Linux.

Эта статья службы поддержки IBM предполагает, что в Windows это число 512, и вы можете изменить его в реестре (как указано в статье)

Поскольку open() возвращает fd как int - размер int ограничивает также верхний предел. (не имеет значения, поскольку INT_MAX много)

1 голос
/ 25 мая 2011

К вашему сведению, от имени пользователя root вы должны сначала изменить элемент 'nofile' в / etc / security / limit.conf . Например:

*                hard    nofile          10240
*                soft    nofile          10240

(изменения в limit.conf обычно вступают в силу при входе пользователя в систему)

Затем пользователи могут использовать команду ulimit -n bash. Я протестировал это до 10 240 файлов в Fedora 11.

ulimit -n <max_number_of_files>

Наконец, все это ограничено пределом ядра, заданным: (я думаю, вы могли бы ввести значение в это, чтобы пойти еще выше ... на свой страх и риск)

cat /proc/sys/fs/file-max

Также см. http://www.karakas -online.de / forum / viewtopic.php? T = 9834

...