ubicacion temporales tamaño maximo los limite guardan está eliminar dónde donde carpeta buzon archivos alcanzado c++ windows

c++ - temporales - ¿Existe un límite en la cantidad de archivos abiertos en Windows?



tamaño maximo pst outlook 2016 (7)

Estoy abriendo muchos archivos con fopen () en VC ++ pero después de un tiempo falla.

¿Existe un límite en la cantidad de archivos que puede abrir simultáneamente?


En caso de que alguien más no sepa a qué se aplica el límite, creo que este es un límite por proceso y no para todo el sistema.

Acabo de escribir un pequeño programa de prueba para abrir archivos hasta que falla. Llega a 2045 archivos antes de fallar (2045 + STDIN + STDOUT + STDERROR = 2048), luego lo dejé abierto y ejecuté otra copia.

La segunda copia mostró el mismo comportamiento, lo que significa que tenía al menos 4096 archivos abiertos a la vez.


Encontré el mismo problema, pero usando Embarcadero C ++ - Creador de RAD Studio 10.2. El C-runtime de esa cosa no parece proporcionar _getmaxstdio o _setmaxstdio , pero algunas macros y su límite predeterminado es mucho más bajo que lo que se dice aquí para otros tiempos de ejecución:

stdio.h:

/* Number of files that can be open simultaneously */ #if defined(__STDC__) #define FOPEN_MAX (_NFILE_) #else #define FOPEN_MAX (_NFILE_) #define SYS_OPEN (_NFILE_) #endif

_nfile.h:

#if defined(_WIN64) #define _NFILE_ 512 #else #define _NFILE_ 50 #endif


No sé de dónde sacó ese número de Paulo. En los sistemas operativos basados ​​en Windows NT, la cantidad de identificadores de archivos abiertos por proceso está básicamente limitada por la memoria física, ciertamente es de cientos de miles.


Sí, existen límites según el nivel de acceso que use al abrir los archivos. Puede usar _getmaxstdio para encontrar los límites y _setmaxstdio para cambiar los límites.


Sí, hay un límite.

El límite depende del sistema operativo y la memoria disponible.

En el viejo DOS el límite era 255 archivos abiertos simultáneamente.

En Windows XP, el límite es más alto (creo que es 2,048 según lo establecido por MSDN ).


Si usa las bibliotecas estándar C / C ++ POSIX con Windows, la respuesta es "sí", hay un límite.

Sin embargo, curiosamente, el límite lo impone el tipo de bibliotecas C / C ++ que está utilizando.

Me encontré con el siguiente hilo JIRA ( http://bugs.mysql.com/bug.php?id=24509 ) de MySQL. Estaban lidiando con el mismo problema sobre la cantidad de archivos abiertos.

Sin embargo, Paul DuBois explicó que el problema podría ser efectivamente eliminado en Windows usando ...

Las llamadas a la API de Win32 (CreateFile (), WriteFile (), etc.) y el número máximo predeterminado de archivos abiertos se ha aumentado a 16384. El máximo se puede aumentar aún más utilizando la opción --max-open-files = N en inicio del servidor.

Naturalmente, podría tener una cantidad teóricamente grande de archivos abiertos mediante una técnica similar a la combinación de conexiones de bases de datos, pero eso tendría un efecto grave en el rendimiento.

De hecho, abrir una gran cantidad de archivos podría ser un mal diseño. Sin embargo, algunas situaciones lo requieren. Por ejemplo, si está creando un servidor de base de datos que usarán miles de usuarios o aplicaciones, el servidor necesariamente tendrá que abrir una gran cantidad de archivos (o sufrir un golpe de rendimiento al usar las técnicas de agrupación de descriptores de archivos).


Las bibliotecas de tiempo de ejecución de C tienen un límite de 512 para la cantidad de archivos que se pueden abrir en cualquier momento. Intentar abrir más que el número máximo de descriptores de archivos o secuencias de archivos provoca un error en el programa. Use _setmaxstdio para cambiar este número. Se puede leer más información sobre esto here

También es posible que deba comprobar si su versión de Windows admite el límite superior que está intentando establecer con _setmaxstdio . Para obtener más información sobre _setmaxstdio consulte here

La información sobre el tema correspondiente a VS 2015 se puede encontrar here