Struppi: kein DBM close nach untie ?

Beitrag lesen

Nur im Moment kann ich die logdatei nicht ansehen da ich mit einer schleife ein dauer lauf bewirkt habe,welche meine error log auf über 700MB anstiegen liess ;-)

Falls dies wirklich der Fall ist, vergiß es!

Nö nicht die datenbank sondern die errorlog datei,weil ich den schalter -w aktiviert hatte und der server nur noch warnungen ausspuckte.

Jo, hatte ich beim 2. lesen auch gemerkt.

while (<DBM>){

Was ist denn dieses DBM? Das kam bisher nirgendwo vor und das brauchst du auch nicht.

hab ich irgendwo wie z.B. http://iis1.cps.unizar.es/Oreilly/perl/learn/ch17_02.htm aufgefangen und übernommen.
Hab mich halt etwas festgefressen,eine datei öffnen zu müssen explizit zu flocken und wieder mit close zu schliessen.

Der flock bei DB_File ist keine Datei, d.h. du öffnest keine Datei, sondern erzeugst einen Handle um die Datei locken zu können.

wie du schon hier gelesen hast http://www.hk8.org/old_web/linux/cgi/ch10_02.htm

my $db = tie %hash, "MLDBM", $dbm_file, O_CREAT | O_RDWR, 0644;

Hier wird der HASH "getied"

my $fd = $db->fd; # Get file descriptor

Das ist (wenn ich dsas richtig verstehe) der Dateihnadle aus DB_File

open DBM, "+<&=$fd" ; # Get dup filehandle

mit Hilfe dieses Handles und der seltsamen Zeichen davor, bekommt man einen normalen Dateihandle.

flock DBM, LOCK_EX; # Lock exclusively

Den man dan locken kann.

Aber ansonsten wird mit DBM nichts mehr gemacht, es ist überflüssig.

und durch:
undef $db;
hast du auch keine Zugriff mehr darauf. weshalb close fehl schlägt.

Das close ist aber überflüssig, da untie die Datei ja schon schliesst.

Struppi.