Почему я могу открыть только 2045 файлов с Tie :: File в Windows? - PullRequest
3 голосов
/ 26 марта 2009

У меня есть следующий код, который пытается привязать массивы к файлам. Кроме того, когда я запускаю этот код, он создает только 2045 файлов. В чем здесь проблема?

#!/usr/bin/perl
use Tie::File;

for (my $i = 0; $i < 10000; $i++) {
    @files{$i} = ();
    tie @{$files{$i}}, 'Tie::File', "files//tiefile$i";
}

Редактировать: я нахожусь на окнах

Ответы [ 2 ]

14 голосов
/ 26 марта 2009

Вы накапливаете дескрипторы открытых файлов (см. ulimit -n, setrlimit RLIMIT_NOFILE / RLIMIT_OFILE), и в конечном итоге вы нажмете 2048 лимитов дескрипторов открытых файлов (2045 + stdin + stdout + stderr.)

В Windows вам придется переписать приложение так, чтобы оно одновременно содержало не более 2048 дескрипторов открытых файлов, поскольку ограничение в 2048 является жестким (не может быть изменено) в MSVC stdio.

2 голосов
/ 26 марта 2009

На машинах Linux перейдите на /etc/security/limits.conf и добавьте или измените эти строки

* soft nofile 10003
* hard nofile 10003

Это увеличит количество файлов, которое может открыть каждый процесс, до 10003 (помните, что вы всегда начинаете с трех открытых: stdin, stdout и stderr).

Судя по вашим комментариям, звучит так, будто вы используете компьютер с Win32. Я не могу найти способ увеличить количество открытых файлов на процесс, но вы могли бы, и я подчеркиваю, могли бы справиться с этим через fork 'ing (который действительно работает в Win32 ).

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