PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : fclose funktioniert nicht?



nobody0
18-10-2002, 16:13
Mit einem C-Programm, mit dem einige tausend Dateien verarbeitet werden, habe ich das Problem, das fclose nicht richtig funktioniert, obwohl ich VOR und NACH jedem

fp=fopen(cline,"w");

immer

if ( fp != NULL )
fclose(fp);

stehen habe!

Das Programm terminiert nämlich mit "too many open files" mit ca. 30.000 geöffneten Dateien, weil die Dateien dreifach geöffnet bleiben!

Woran kann das liegen? :confused:

Und was kann ich dagegen machen? :confused:

maceop
18-10-2002, 17:21
guck dir mal dein OPEN_MAX an, also wieviele Dateien du maximal pro Prozess geöffnet haben darfst, geht u.a. mit sysconf. würde mich nur wundern dass er es zulässt obwohl das limit überschritten wird.

vielleicht liegts daran, dass du eben das Limit überschreitest, ansonsten musst du mal gucken ob du die limits hoch setzen kannst für OPEN_MAX..

maceop

nobody0
18-10-2002, 17:45
Also ulimit liefert unlimited und wegen

echo 32768 > /proc/sys/fs/file-max

in /etc/init.d/boot.local sollte die Anzahl ausreichen.
Den Wert weiter raufzusetzen ist wohl nicht sinnvoll (vor einem Jahr habe ich mal nachgesehen u. nur 1/4 als default gefunden) und ausserdem würde damit das Problem nicht gelöst!

Im Programm ist es so, das die Dateien alle nacheinander geöffnet und geschlossen werden, weil zu einem Zeitpunkt immer nur eine Datei verwendet wird. Wenn die Bearbeitung der Datei abgeschlossen ist, dann wird die nicht mehr benötigt und mit fclose geschlossen.
Deshalb wären für das Programm schon ein Limit von 10 geöffnete Dateien mehr als ausreichend!

Ich habe schon nach einem Befehl gesucht, der alle vom Programm geöffneten Dateien schliesst, aber nix gefunden :(

nobody0
19-10-2002, 08:24
Jetzt funktioniert es doch, weil ich mehrere File-Pointer hatte und bei einem fclose vor dem nächsten fopen vergessen hatte :rolleyes: