Windows количество открытых файлов

Обновлено: 03.07.2024

Я открываю много файлов с помощью fopen () в VC ++, но через некоторое время это не удается.

Есть ли ограничение на количество файлов, которые вы можете открывать одновременно?

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

Также вам может потребоваться проверить, поддерживает ли ваша версия Windows верхний предел, который вы пытаетесь установить с помощью _setmaxstdio . Дополнительную информацию о _setmaxstdio см. здесь

Информацию по теме, соответствующей VS 2015, можно найти здесь

Если кто-то еще не понимает, к чему применяется ограничение, я считаю, что это ограничение для каждого процесса, а не для всей системы.

Я просто написал небольшую тестовую программу, чтобы открывать файлы до тех пор, пока она не выйдет из строя. До сбоя он достигает 2045 файлов (2045 + STDIN + STDOUT + STDERROR = 2048), затем я оставил его открытым и запустил еще одну копию.

Вторая копия показала такое же поведение, то есть у меня одновременно было открыто не менее 4096 файлов.

Если вы используете стандартные библиотеки C / C ++ POSIX с Windows, ответ - «да», есть предел.

Однако, что интересно, ограничение накладывается типом используемых вами библиотек C / C ++.

Однако Пол Дюбуа объяснил, что проблему можно эффективно устранить в Windows, используя .

Вызовы Win32 API (CreateFile (), WriteFile () и т. Д.) И максимальное количество открытых файлов по умолчанию было увеличено до 16384. Максимальное количество может быть увеличено дополнительно, используя параметр --max-open-files = N в запуск сервера.

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

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

Да, есть ограничения в зависимости от уровня доступа, который вы используете при открытии файлов. Вы можете использовать _getmaxstdio , чтобы найти лимиты, и _setmaxstdio , чтобы изменить лимиты.

Я не знаю, откуда Пауло взял это число. В операционных системах на базе Windows NT количество дескрипторов файлов, открываемых каждым процессом, в основном ограничено физической памятью - это определенно сотни тысяч.

Возникла та же проблема, но с использованием Embarcadero C ++ - Builder RAD Studio 10.2. Среда выполнения этой штуки, похоже, не предоставляет _getmaxstdio или _setmaxstdio , но некоторые макросов, и их предел по умолчанию намного ниже, чем указано здесь для других сред выполнения:

Я открываю много файлов с помощью fopen() в VC++, но через некоторое время это удается.

существует ли ограничение на количество файлов, которые вы можете открыть одновременно?

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

информация по этому вопросу, соответствующая VS 2015, может быть найдена здесь

Если вы используете стандартные библиотеки POSIX C / C++ с Windows, ответ "да", есть предел.

однако, что интересно, ограничение накладывается типом библиотек C / C++, которые вы используете.

однако Пол Дюбуа объяснил, что проблема может эффективно устраняется в Windows с помощью .

вызовы Win32 API (CreateFile(), WriteFile () и так далее) и максимальное количество открытых файлов по умолчанию был увеличен до 16384. Этот максимум можно увеличить дальше мимо использование параметра --max-open-files=N в запуск сервера.

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

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

в случае, если кто-то еще неясен относительно того, к чему применяется предел, я считаю, что это предел для каждого процесса, а не для всей системы.

Я просто написал небольшую тестовую программу для открытия файлов, пока она не выйдет из строя. Он попадает в 2045 файлов перед сбоем (2045 + STDIN + STDOUT + STDERROR = 2048), затем я оставил это открытым и запустил другую копию.

вторая копия показала такое же поведение, то есть у меня было по крайней мере 4096 файлов, открытых сразу.

Да есть ограничения в зависимости от уровня доступа, который вы используете при открытии файлов. Вы можете использовать _getmaxstdio найти пределы и _setmaxstdio изменить ограничения.

Я не знаю, откуда Пауло взял этот номер.. В операционных системах на базе windows NT количество дескрипторов файлов, открытых для каждого процесса, в основном ограничено физической памятью - это, безусловно, сотни тысяч.

предел зависит от ОС, и доступной памяти.

в старом Д. С. О. предел 255 simultaneuously открытых файлов.

в Windows XP предел выше (я считаю, что это 2,048, как указано MSDN).

столкнулся с той же проблемой, но с использованием Embarcadero C++-Builder из RAD Studio 10.2. C-время выполнения этой вещи, похоже, не обеспечивает _getmaxstdio или _setmaxstdio , но некоторые макрос и их предел по умолчанию намного ниже, чем сказано здесь для других сред выполнения:

Снять ограничения одновременного открытия 15 и более файлов в Windows 10

Независимо от того, чем именно вы занимаетесь на компьютером, вам может потребоваться разом открыть достаточно большое количество однородных объектов. Казалось бы, что в этом сложно, но как показывает практика, сделать нечто подобное в «десятки» не просто, так как у нее имеются свои ограничения, которые не позволяют открывать больше 15 однородных файлов. Именно по этому, мы предлагаем вам просто на просто снять ограничения одновременного открытия 15 и более файлов в Windows 10.

Если вы долго используете операционные системы семейства Windows, тогда вам должно быть известно, что подобного рода ограничения уже давным-давно присущи разным ОС и сделано это специально для того, чтоб предотвратить чрезмерную нагрузку на работающую операционную систему, которая от столь большого количества открытых файлов, может зависнуть. Тем более, вероятность зависания операционной системы велика при условии, что папки или фалы будут иметь достаточно большой вес и загрузят процессор по полной.



Для того, чтоб снять ограничения одновременного открытия 15 и более файлов в Windows 10 вам нужно при помощи команды «regedit» произвести открытие «Редактора реестра» и в его левой колонке развернуть следующую ветку: HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer.

Теперь, в подразделе с именем «Explorer», создаем совершенно новый, 32-битный параметр типа DWORD, которому задаем имя «MultipleInvokePromptMinimum» → производим клик по параметру «MultipleInvokePromptMinimum» и в десятичной системе исчисления, задаем то количество файлов, которое будет доступно для команд «MultipleInvokePromptMinimum»: «Открыть», «Изменить» и «Распечатать».


В нашем случае, мы поставили цифровое значение равное «50», что позволит без особых проблем, одновременно открыть 50 конкретных файлов или папок, которые нужным нам для работы.


Обратите внимание, что для вступления новых настроек, необходимо произвести перезагрузку операционной системы Windows 10.

Подобно тому как браузеры могут открывать целую группу ссылок в отдельных вкладках, Windows может открывать сразу несколько однородных объектов, например, папок или файлов. Однако если вы попробуете одновременно открыть более 15 файлов или папок, то обнаружите, что в меню у вас пропали опции «Открыть», «Изменить» и «Распечатать».

Эта особенность при работе с группами объектов присуща не только Windows 10, подобное поведение система обнаруживает и в более ранних версиях вплоть до Windows Vista. Ограничение на одновременное открытие групп файлов и папок установлено разработчиками намерено с целью предотвратить случайное зависание системы, если открываемые файлы окажутся достаточно массивными.

4687042_2

4687042_3

Только вот как быть тем пользователям, которым в силу обстоятельств приходится работать с большими группами файлов? Допустим, вам нужно открыть сразу 50 объектов. Так вот, есть простой способ снять это ограничение. Командой regedit откройте редактор реестра и разверните в левой колонке следующую ветку:

Создайте в подразделе Explorer новый 32-битный параметр типа DWORD и дайте ему имя MultipleInvokePromptMinimum. Затем кликните по нему два раза мышкой и установите в открывшемся окошке его значение в десятичной системе – число выделенных объектов в Проводнике, для которых будут доступны команды «Открыть», «Изменить» и «Распечатать».

Вам может быть интересно: Процессор сейчас не поддерживается

В нашем примере в качестве значения параметра MultipleInvokePromptMinimum установлено 50. Это значит, что мы сможем открывать сразу 50 выбранных файлов или папок.

4687042_6

Чтобы новые настройки вступили в силу, перезагрузите компьютер или выйдите и заново войдите в систему.

Читайте также: