Alain: ist "unlock" nicht unnötig?

Hallo,
Ich habe mal gelesen in einer perl doku,dass man "unlock" nicht verwenden sollte,
weil z.B. ,wenn das script bei "lock,2" zwei zugriffe gleichzeitig erhält es passieren könnte
dass beim unlock (weil daten noch im zwischenspeicher und nicht abgespeichert) durch den zweiten zugriff
alle daten löschen oder beschädigen könnte.
Wäre es in dem fall nicht sinnvoll,einfach immer close zu benutzen anstatt unlock?
Hier hab ich ein beispiel:
seek (PASSWD, 0, 2);
print PASSWD "$username:$password\n";
unlock (\*PASSWD);
--------
zwischen frage 1,wenn man hier close (PASSWD) benutzt,kann man dann seek weglassen?

zweites beispiel:
truncate(PASSWD, 0) or error($FATAL_ERROR, "$LOCALTIME", 'REMOVE');
seek (PASSWD, 0, 0);
print PASSWD $tmp;
unlock (\*PASSWD);
---------
und auch hier,wenn man close...anstatt unlock benutzen würde,könnte man dann auf
truncate sowie seek verzichten?

Gruss vom Alain

--
..."Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)
  1. Hallo,
    Ich habe mal gelesen in einer perl doku,dass man "unlock" nicht verwenden sollte,

    ein close mach automatisch ein unlock

    Aber es kann durchaus Fälle geben, wo ein unlock gebraucht wird, aber dann solltest du genau Wissen was du tust und was passieren kannn.

    Wäre es in dem fall nicht sinnvoll,einfach immer close zu benutzen anstatt unlock?

    Genau.

    Hier hab ich ein beispiel:
    seek (PASSWD, 0, 2);
    print PASSWD "$username:$password\n";
    unlock (\*PASSWD);

    zwischen frage 1,wenn man hier close (PASSWD) benutzt,kann man dann seek weglassen?

    Hat das was miteinander zu tun?
    Das seek brauchst du doch, weil du die Datei zum lesen+schreiben öffnest. und in dem Falle musst du immer mit seek den Filezeiger setzten.

    zweites beispiel:
    truncate(PASSWD, 0) or error($FATAL_ERROR, "$LOCALTIME", 'REMOVE');
    seek (PASSWD, 0, 0);
    print PASSWD $tmp;
    unlock (\*PASSWD);

    und auch hier,wenn man close...anstatt unlock benutzen würde,könnte man dann auf
    truncate sowie seek verzichten?

    Auch das hat nichts miteinader zu tun. seek brauchst du nur wie schon oben erwähnt, bei truncate genau das Gleiche, da du die Datei erst lesen und neu beschreiben möchtest musst du sie vorher löschen, es sei denn du bist 100% sicher das der neue Inhalte größer als der alte ist.

    Du könntest:

    open FH, "datei" ......
    flock .....
    {lesen}
    close

    open FH ">datei"....
    schreibe
    close

    dir das truncate und seek so sparen, aber du weißt nicht was zwischen dem 1. close und dem 2. open passiert und in CGI Anwednungen kann diese Zeit ausreichen das ein anderer Prozess die Daten einliest und damit die falschen verwendet (und es wird früher oder später passieren).

    Also ist dein Variante besser und unlock kann man sich sparen.

    Struppi.

    1. Hallo struppi,

      ... immer close zu benutzen anstatt unlock?

      Genau.

      danke für die Bestätigung!

      Du könntest:

      open FH, "datei" ......
      flock .....
      {lesen}
      close

      open FH ">datei"....
      schreibe
      close

      dir das truncate und seek so sparen, aber du weißt nicht was zwischen dem 1. close und dem 2. open passiert und in CGI Anwednungen kann diese Zeit ausreichen das ein anderer Prozess die Daten einliest und damit die falschen verwendet (und es wird früher oder später passieren).

      Also ist dein Variante besser und unlock kann man sich sparen.

      und für den Tip
      Besten gruss
      vom Alain