C: Zu viele offene Dateien mit opendir und öffnen

8

Ich lese etwa 6000 Textdateien mit folgendem Code in einer Schleife in den Speicher:

%Vor%

In der Iteration 2826 erhalte ich beim Öffnen der 2826. Datei einen Fehler " Zu viele offene Dateien ". Bis zu diesem Punkt ist in der Close-Operation kein Fehler aufgetreten.
Da es immer in der 2826. Iteration hängt, glaube ich nicht, dass ich warten sollte, bis eine Datei wirklich geschlossen wird, nachdem close();
aufgerufen wurde Ich hatte das gleiche Problem mit fopen, fread und fclose.
Ich glaube nicht, dass es mit dem Kontext dieses Snippets zu tun hat, aber wenn du es tust, werde ich es bereitstellen.
Danke für deine Zeit!

BEARBEITEN:
Ich legte das Programm in den Ruhezustand und überprüfte / proc // fd / (danke an nos). Wie du vermutest, gab es genau 1024 Dateideskriptoren, die ich als übliche Grenze empfand.
+ Ich habe dir die ganze Funktion gegeben, die Dokumente aus einem Verzeichnis und allen Unterverzeichnissen liest + Das Programm läuft unter Linux! Entschuldigung für das Vergessen!

    
Callahan 24.08.2011, 12:52
quelle

4 Antworten

12

Sie müssen nach einer Schleife coventir () aufrufen. Das Öffnen eines Verzeichnisses verbraucht auch einen Dateideskriptor.

    
Patrick B. 24.08.2011, 13:49
quelle
2

Möglicherweise treffen Sie das Betriebssystemlimit für # erlaubte offene Dateien. Wenn Sie nicht wissen, welches Betriebssystem Sie verwenden, sollten Sie Ihr OS + "zu viele offene Dateien" googlen, um herauszufinden, wie Sie das beheben können. Hier ist ein Ergebnis für linux, Ссылка

    
Matt Arnett 24.08.2011 13:02
quelle
1

Ich habe das Problem gelöst, indem ich zu /etc/security/limits.conf

hinzugefügt habe

* soft nofile 40960

* hard nofile 102400

Problem war, wenn sich bei debian einloggen zeigt ulimit -n 40960 , aber wenn su Benutzer, ist es wieder 1024 . Sie müssen eine Zeile in /etc/pam.d/su

auskommentieren

session required pam_limits.so

Dann immer benötigte Limits

    
witeX 30.08.2012 23:16
quelle
0

Sie sollten covenir () aufrufen, da opendir auch den Deskriptor zurückgibt Wie im Linux-System-Maximum kann so viel Zeit / proc / sys / fs / file-max-Datei geöffnet werden obwohl Sie diese Zahl erhöhen / verringern können

    
Anshul garg 31.08.2012 08:35
quelle

Tags und Links