PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C - fopen Fehler 24 -> zu viele geöffnete Dateien



Joeman
23-09-2004, 10:29
Hi!
Ich habe ein Problem mit dem guten alten fopen:
Und zwar bekomme ich nach einiger Laufzeit den Fehler 24 (EMFILE).
Das bedeutet, dass ich zu viele Dateien geöffnet habe, also mehr als in FOPEN_MAX bzw. OPEN_MAX erlaubt sind.
Nun werden in dem Programm in zig unterschiedlichen Funktionen und Stellen fopen und fclose benutzt. Bei irgendeinem fopen scheint also ein fclose zu fehlen.
Ich möchte mir daher in der Hauptschleife immer ausgeben lassen, wieviele Dateien mittlerweile geöffnet sind, um zu erkennen in welchem Programmteil der Fehler versteckt ist. Wie kann ich das machen?
Der Filepointer zeigt ja nur die Speicheradresse an, nicht die fortlaufende "Nummer" der geöffneten Datei.
Gibt es irgendeinen Strukt, der diese Information enthält?
Es muss ja irgendwo mitgezählt werden, sonst könnte der Fehler oben ja nie auftauchen.
Das Programm ist in C auf einer Linuxmaschine.

Schon mal danke!
Gruß
Joeman

wraith
23-09-2004, 11:15
http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&c2coff=1&selm=3A7FDF7C.DC8800E0%40cisco.com

Joeman
24-09-2004, 07:11
Danke!

Der Fehler lag aber woanders.
Und zwar scheint Linux Probleme zu haben, wenn sehr viele Dateien neu generiert und dann gelöscht werden.
Das Programm läuft über eine Schleife in der der Inhalt eines Verzeichnisses in eine Datei geschrieben wird, deren Namen durch "mkstemp(datei) " generiert wird.
Wenn die Schleife 1000mal durchlaufen wird, scheint die Festplatte nicht mehr hinterher zu kommen. Und dann kommt auch der Fehler 24, obwohl gar nicht so viele Dateien geöffnet sind.
Das Problem gibts aber nur beim Generieren von neuen Dateien, nicht beim Öffnen / Lesen /Schließen.
Wir haben also ne Datei gemacht, die einmal vor der Schleife gefüllt wird und dann nur 1000 mal gelesen wird.
(Geht nicht anders, da die Funktion von vielen Programmen genutzt wird)
Gruß
Joeman