Can „\ Device \ NamedPipe \\ Win32Pipes“ Griffe Ursache „Zu viele offene Dateien“ Fehler?

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

  •  20-09-2019
  •  | 
  •  

Frage

Fortsetzung von diese Frage :

Wenn ich versuche, fopen auf Windows zu tun, erhalte ich eine „Zu viele offene Dateien“ -Fehler. Ich habe versucht, zu analysieren, wie viele offene Dateien, die ich habe, und scheint nicht zu viel.

Aber wenn ich Process Explorer ausgeführt, bemerkte ich, dass ich viele offenen Handles mit ähnlichen Namen habe: "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e2", "\ Device \ NamedPipe \ Win32Pipes.00000590.000000e3" usw. Ich sehe dass die Anzahl dieser Griffe ist genau die Anzahl der Iterationen gleich, dass mein Programm ausgeführt wird, bevor es „zu viele offene Dateien“ zurückgegeben und gestoppt werden.

Ich bin auf der Suche nach einer Antwort, was sind diese Griffe, und könnten sie tatsächlich führen, dass die „Too many open files“ Fehler?

In meinem Programm bin ich das Laden von Dateien von Remote-Laufwerk, und ich schaffe TCP / IP-Verbindungen. Könnte eine dieser Operationen erstellen, um diese Griffe?

War es hilfreich?

Lösung

Erinnern Sie fclose () die Pfeife jedes Mal durch die Iteration? (Siehe -> unten).

Wenn Sie nicht öffnen Rohre undicht sind.

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

Allerdings, wenn Ihre Absicht ist, eine Menge Datei Griffe auf einmal öffnen, dann die andere Sache bewusst zu sein, dass der C-Laufzeit gibt typischerweise eine Anzahl von Datei-Handles Sie jeder offen einmal haben kann. Diese Zahl wird in der Regel viel weniger als das Betriebssystem bereitstellen kann. So verwenden Sie die Datei-Handles zur Verfügung gestellt OS müssen Sie Win32 / Win64-API-Funktionen verwenden:

  • Createfile
  • ReadFile-
  • Writefile
  • GetFileSize
  • Closehandle

OS zur Verfügung gestellte Datei-Handles sind vom Typ HANDLE nicht FILE *

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top