|
| flock Fra : Lars Kim Lund |
Dato : 01-01-01 18:45 |
|
Hej og godt nytår.
Har et problem med et cgi-script der benytter en datafil. Jeg flock'er
filen, men tilsyneladende sker der ting og sager hvis to instanser af
scriptet får fat i datafilen på samme tid. (Den læser indholdet, laver
et eller andet og skriver en ny fil).
open (FILE, "foo.txt") or die();
flock (FILE, 2);
do_stuff;
flock (FILE, 8);
close FILE;
Meningen var at den skulle låse filen eksklusivt (så andre ikke kunne
ændre i filen før den var unflock'et), men det virker ikke.
Hvad gør jeg forkert?
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Jens Kristian Soegaa~ (01-01-2001)
| Kommentar Fra : Jens Kristian Soegaa~ |
Dato : 01-01-01 19:23 |
|
Lars Kim Lund <larskim@mail.com> writes:
> open (FILE, "foo.txt") or die();
> flock (FILE, 2);
Her glemmer du vel at checke hvad flock returnerer?
Prøv at læs:
perldoc perlfunc
(afsnittet om flock)
og
perldoc perlfaq5
(afsnittet om file locking)
Der kan, så vidt jeg husker, være problemer med at låse filer på
Windows systemet.
--
Jens Kristian Søgaard,
jk@soegaard.net -- http://www.jksoegaard.dk/
Søger du noget? -- http://www.google.com/
echo|perl -ple'$_+=4E-6*!int rand()**2+rand()**2while$i++-1E6'
| |
Lars Kim Lund (01-01-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 01-01-01 20:09 |
|
Hej Jens Kristian Soegaard <jk@soegaard.net>
>> open (FILE, "foo.txt") or die();
>> flock (FILE, 2);
>
>Her glemmer du vel at checke hvad flock returnerer?
Akja, hvis man ikke checker om flock går godt så fortsætter den bare?
Dvs. noget i retningen flock (FILE,2) or die (); ?
Er der noget indbygget så man kan få den til at vente på at filen
bliver unlocked eller skal man skrive en sub til at håndtere det?
>Prøv at læs:
>
> perldoc perlfunc
> (afsnittet om flock)
>
>og
>
> perldoc perlfaq5
> (afsnittet om file locking)
Det har jeg gjort.
>Der kan, så vidt jeg husker, være problemer med at låse filer på
>Windows systemet.
Det er på en BSD-ting.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Jens Kristian Søgaar~ (01-01-2001)
| Kommentar Fra : Jens Kristian Søgaar~ |
Dato : 01-01-01 23:52 |
|
Lars Kim Lund <larskim@mail.com> writes:
> >> flock (FILE, 2);
> >Her glemmer du vel at checke hvad flock returnerer?
> Akja, hvis man ikke checker om flock går godt så fortsætter den bare?
Ja, selvfølgelig
> Dvs. noget i retningen flock (FILE,2) or die (); ?
Tjah, jeg vil nok foretrække, at du skrev fejlmeddelelsen ud på
skærmen, så man kunne se, hvad der foregik. På samme måde som jeg
ville foretrække at bruge LOCK_EX og LOCK_UN istedet for 2 og 8.
I øvrigt: Har du husket at _alle_ programmer der tilgår filerne skal
bruge flock()? (også dem der læser - de kan bruge LOCK_SH).
--
Jens Kristian Søgaard,
jk@soegaard.net -- http://www.jksoegaard.dk/
Søger du noget? -- http://www.google.com/
echo|perl -ple'$_+=4E-6*!int rand()**2+rand()**2while$i++-1E6'
| |
Lars Kim Lund (02-01-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 02-01-01 00:33 |
|
Hej Jens Kristian Søgaard <jk@soegaard.net>
>I øvrigt: Har du husket at _alle_ programmer der tilgår filerne skal
>bruge flock()? (også dem der læser - de kan bruge LOCK_SH).
Ja, det mener jeg helt bestemt. Men jeg checker ikke returkoder, jeg
troede det var "indbygget" i flock at den ventede til filen var klar.
Tja, men jeg har i hvert fald fundet fejlen. Tak.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Thorbjørn Ravn Ander~ (02-01-2001)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 02-01-01 21:05 |
|
Lars Kim Lund wrote:
> Hvad gør jeg forkert?
Gæt: Bruger tal istedet for symbolske konstanter?
--
Thorbjørn Ravn Andersen "...and... Tubular Bells!"
http://bigfoot.com/~thunderbear
| |
|
|