Can « \ Device \ namedpipe \\ Win32Pipes » gère la cause « Trop de fichiers ouverts » erreur?

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

  •  20-09-2019
  •  | 
  •  

Question

cette question :

Quand je suis en train de faire fopen sur Windows, je reçois une erreur « Trop de fichiers ouverts ». J'ai essayé d'analyser, le nombre de fichiers ouverts je, et semble comme pas trop.

Mais quand j'exécuté Process Explorer, j'ai remarqué que j'ai beaucoup poignées ouvertes avec des noms similaires: "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e2", "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e3", etc. Je vois que le nombre de ces poignées est exactement égal au nombre des itérations que mon programme exécuté, avant de retourner « Trop de fichiers ouverts » et arrêté.

Je cherche une réponse, quelles sont ces poignées, et pourraient-ils réellement causer la « Trop de fichiers ouverts » erreur?

Dans mon programme, je suis en train de charger des fichiers à partir du lecteur à distance, et je crée des connexions TCP / IP. Peut-on de ces opérations créer ces poignées?

Était-ce utile?

La solution

Êtes-vous pas oublier de fclose () votre tuyau à chaque fois par l'itération? (Voir -> ci-dessous).

Si vous ne sont fuites dans les tuyaux ouverts.

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!)
    }
}

Toutefois, si votre intention est d'avoir beaucoup de poignées fichier ouvert à la fois, puis l'autre chose à prendre en compte est que le runtime C spécifie généralement un certain nombre de fichiers que vous poignées peut ouvrir à un moment donné. Ce nombre sera généralement beaucoup moins que le système d'exploitation est capable de fournir. Pour utiliser le système d'exploitation fichier Poignées vous devez utiliser les fonctions API Win32 / Win64:

  • CreateFile
  • ReadFile
  • WriteFile
  • GetFileSize
  • CloseHandle

OS fourni handles de fichiers sont de type FILE * POIGNÉE pas

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top