Archiv verlassen und diese Seite im Standarddesign anzeigen : fclose funktioniert nicht?
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:
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
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 :(
Jetzt funktioniert es doch, weil ich mehrere File-Pointer hatte und bei einem fclose vor dem nächsten fopen vergessen hatte :rolleyes:
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.