_setmaxstdio макс открыть файлы только 2048? - PullRequest
4 голосов
/ 26 ноября 2009

http://msdn.microsoft.com/en-us/library/6e3b887c(VS.80).aspx

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

32 или 64-битная ОС - тот же предел!

Ответы [ 3 ]

4 голосов
/ 08 марта 2017

Нет. Изучая исходный код CRT, мы можем узнать, что CRT ограничил максимальное число.

 /*
 * Make sure the request is reasonable.
 */
_VALIDATE_RETURN(((maxnum >= _IOB_ENTRIES) && (maxnum <= _NHANDLE_)), EINVAL, -1);

ПУШКА :

#define _NHANDLE_           (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS)

Те постоянные:

/*
 * Definition of IOINFO_L2E, the log base 2 of the number of elements in each
 * array of ioinfo structs.
 */
#define IOINFO_L2E          5

/*
 * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array
 */
#define IOINFO_ARRAY_ELTS   (1 << IOINFO_L2E)

/*
 * Definition of IOINFO_ARRAYS, maximum number of supported ioinfo arrays.
 */
#define IOINFO_ARRAYS       64

Как видите, он ограничен реализацией CRT.

1 голос
/ 10 января 2014

номер

Я считаю, что ограничение связано с возможностью наследовать открытые файлы из вызова CreateProcess. CreateProcess имеет только 2048 слотов для передачи дескрипторов (как на 32-битных, так и на 64-битных). Вы можете отладить программу и перейти к функциям CRT system, exec или spawn, чтобы увидеть ограничение в 2048 слотов.

Если вы используете файловый API-интерфейс Win32 (CreateFile, WriteFile, ReadFile, CloseHandle и т. Д.), То у вас нет ограничений на открытые файлы (ну, вы делаете, но я полагаю, что он основан на ваших ресурсах, таких как память) ).

0 голосов
/ 26 ноября 2009

См. Существует ли ограничение на количество открытых файлов в Windows .

Судя по комментариям к принятому ответу, изменить это невозможно. Возможно, вы можете использовать API-вызов CreateFile вместо _wopen?

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