alex: mehrere db_files gleichzeitig öffnen geht nicht ?

Ahoi

ich würde gerne mehrere DB_FILEs öffnen:

__CODE__

my $db = tie %HASH1, "DB_File", $file1, O_CREAT | O_RDONLY, 0644 or die "Can't open db_file: $!\n";
    my $fd  = $db->fd();
    open DATAFILE, "+<&=$fd" or die "Fehler beim sicheren Öffnen: $!\n";
    flock(DATAFILE, LOCK_EX ) or die "Konnte Lock nicht bekommen: $!";

my $test1 = $HASH1{"wert1"};

my $db2 = tie %HASH2, "DB_File", $file2, O_CREAT | O_RDONLY, 0644 or die "Can't open db_file: $!\n";
    my $fd2 = $db2->fd();
    open DATAFILE, "+<&=$fd2" or die "Fehler beim sicheren Öffnen: $!\n";
    flock(DATAFILE, LOCK_EX ) or die "Konnte Lock nicht bekommen: $!";

my $test2 = $HASH1{"wert1"};

__END__

Allerdings hab ich das Gefühl das sobald ich die 2.te DB öffne die erste geschlossen wird, weil $test2 keinen wert besitzt... was muss ich also tun damit das so funzt wie ich mir das wünsche? (das soll unter 'use strict' laufen...)

danke, alex

  1. Ahoi

    ich würde gerne mehrere DB_FILEs öffnen:

    __CODE__

    my $db = tie %HASH1, "DB_File", $file1, O_CREAT | O_RDONLY, 0644 or die "Can't open db_file: $!\n";
        my $fd  = $db->fd();
        open DATAFILE, "+<&=$fd" or die "Fehler beim sicheren Öffnen: $!\n";
        flock(DATAFILE, LOCK_EX ) or die "Konnte Lock nicht bekommen: $!";

    Tipp: Lies mal "The Trouble with fd" in der Perldoc.

    Gruss, Erwin

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. Tipp: Lies mal "The Trouble with fd" in der Perldoc.

      aha scheinbar ist das locking ein problem bei db_files, ok dazu war ein tipp ich solle DB_FILE::Lock benutzen, aber ohne beispiele bin ich aufgeschmissen.

      hat jemand zufällig ein beispiel?

      danke

      1. komm wohl nicht drumrum ein neues modul zu installieren

        siehe: http://cpan.develooper.com/modules/by-module/DB_File/DB_File-Lock-0.03.readme

        werde ich wohl morgen machen, trotzdem danke!

        1. hi,

          komm wohl nicht drumrum ein neues modul zu installieren

          siehe: http://cpan.develooper.com/modules/by-module/DB_File/DB_File-Lock-0.03.readme

          werde ich wohl morgen machen, trotzdem danke!

          es kommt ganz darauf an was du mit DB_File machst. Falls nur lesen brauchst du kein Lock. Falls Daten nacheinander aus dem Puffer geschrieben werden brauchst du auch kein Lock, z.B. bei einem Seitenaufrufzähler: Hier schreibt a die Zahl 1 und b überschreibt dann die 1 mit 2 usw.

          Ein Lock brauchst du jedoch auf jeden Fall wenn es nicht sein darf, dass die 1 von a durch eine 2 von b überschrieben wird.

          Beispielsweise wenn Daten per WebForm von verschiedenen Usern kurz hintereinander eingegeben werden. Beim Laden des Forms haben a und b den gleichen Datenbestand, a macht ein Update, b kurz danach - Das Ergebnis: Die Daten von a sind wech.

          Um sowas zu vermeiden schleife ich immer den Zeistempel der DB_Datei im Formular mit und prüfe den beim Submit. Das ist zwar nur sekundengenau, aber in der Praxis völlig ausreichend. Und bei Bedarf kann ich das mit Time::HighRes auch ms genau machen.

          Erwin

          --
          SELFforum - Das Tor zur Welt!
          Theoretiker: Wie kommt das Kupfer in die Leitung?
          Praktiker: Wie kommt der Strom in die Leitung?