Can “\ Device \ NamedPipe \\ Win32Pipes” se ocupa de la causa “Demasiados archivos abiertos” error?

StackOverflow https://stackoverflow.com/questions/2446600

  •  20-09-2019
  •  | 
  •  

Pregunta

Continuando con esta pregunta :

Cuando yo estoy tratando de hacer fopen en Windows, aparece un error "Demasiados archivos abiertos". Traté de analizar, el número de archivos abiertos que tengo, y parece que no demasiado.

Pero cuando ejecuté el explorador de procesos, me di cuenta de que tengo muchos identificadores abiertos con nombres similares: "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e2", "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e3", etc. Veo que el número de estos puntos de control es exactamente igual al número de las iteraciones que mi programa ejecutado, antes de regresar "Demasiados archivos abiertos" y se detuvo.

Estoy buscando una respuesta, ¿cuáles son estos puntos de control, y que en realidad podría causar el error "Demasiados archivos abiertos"?

En mi programa que estoy cargando archivos desde la unidad remota, y yo estoy creando conexiones TCP / IP. ¿Podría una de estas operaciones crear estos puntos de control?

¿Fue útil?

Solución

¿Está recordando a fclose () el tubo cada vez a través de la iteración? (Ver -> abajo).

Si no se filtra la tuberías abiertas.

for(i = 0; i < lotsOfIterations; i++)
{
    FILE *fp;

    fp = fopen(filename[i], "r");
    if (fp != NULL)
    {
        ... do work, etc

        fclose(fp); // finished with this file handle (add this line!)
    }
}

Sin embargo, si su intención es tener una gran cantidad de controladores de archivos abiertos a la vez, entonces la otra cosa a tener en cuenta es que el tiempo de ejecución de C normalmente especifica un número de identificadores de archivo que puede tener abiertos al mismo tiempo. Este número será típicamente mucho menos que el sistema operativo es capaz de proporcionar. Para utilizar el archivo de sistema operativo proporcionado mangos tendrá que utilizar funciones de la API de Win32 / Win64:

  • CreateFile
  • ReadFile
  • WriteFile
  • GetFileSize
  • CloseHandle
No

OS proporcionado identificadores de archivo son del tipo de identificador de archivo *

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top