webForumDet fria alternativet

use Fcntl qw(:flock);

6 svar · 234 visningar · startad av FlashX

FlashXMedlem sedan nov. 19991 033 inlägg
#1

Finns importen kvar efter att man stängt ett filhandtag?
Om jag har fler efterkommande handtag som öppnas, räcker det då med att ange t.ex flock TAGWALL, LOCK_EX; eller måste man alltid ange use Fcntl qw(:flock); för varje öppnat filhandtag.

Kort exempel:

use Fcntl qw(:flock); # Importera de symboliska låsvärdena
open (TAGWALL, "$relativURL") or die "Kan inte öppna $relativURL: $!";
flock TAGWALL, LOCK_SH or die "Delad fillåsning av $relativURL misslyckades; $!";
@lines = <TAGWALL>;
close(TAGWALL);

...lite annan kod...

use Fcntl qw(:flock); # Importera de symboliska låsvärdena
open (TAGWALL, ">$relativURL") or die "Kan inte öppna $relativURL: $!\n";
flock TAGWALL, LOCK_EX or die "Kan inte låsa $relativURL; $!";

print TAGWALL $start;
print TAGWALL "\n";
o.s.v.

eller skulle det gå lika bra med

use Fcntl qw(:flock); # Importera de symboliska låsvärdena
open (TAGWALL, "$relativURL") or die "Kan inte öppna $relativURL: $!";
flock TAGWALL, LOCK_SH or die "Delad fillåsning av $relativURL misslyckades; $!";
@lines = <TAGWALL>;
close(TAGWALL);

...lite annan kod...

open (TAGWALL, ">$relativURL") or die "Kan inte öppna $relativURL: $!\n";
flock TAGWALL, LOCK_EX or die "Kan inte låsa $relativURL; $!";

print TAGWALL $start;
print TAGWALL "\n";
o.s.v.

*** ** *

[red.]
En annan fråga också.
Finns det något sätt att testa hur fillåsningarna fungerar?
Om jag t.ex använder en kombination av LOCK_NB och fixar till ett felmeddelande när filen ej är åtkommlig, hur testar man för att se om det fungerar.
Går det att simulera detta på något sätt?
[/red.]

[Redigerat av FlashX den 22 nov 2000]

Peter_BMedlem sedan apr. 2000642 inlägg
#2

du kan ju skriva ett progg som låser filen och sen tex ställer sig och väntar på input från dig (läs en rad från STDIN... medans det programmet gör det så tar du och kör igång en ny instans av samma program, då lär du märka om det funkat eller ej!

förmodligen behöver du bara göra importen en gång. fast som sagt, prova.

------------------
PeterSign v 2.3.36

FlashXMedlem sedan nov. 19991 033 inlägg
#3

Bra tips Peter :) (varför tänkte jag inte på det :OO)
Testar lite och ser hur det fungerar. Rent logiskt så borde en import räcka tycker man...

FlashXMedlem sedan nov. 19991 033 inlägg
#4

Jo, det räckte med en.
Knepigt att testa och med use Fcntl qw(:flock); fick jag av någon anledning det aldrig att fungera. Däremot gick det bättre när jag testade med use Fcntl qw(:DEFAULT :flock);
Varför vet jag inte...
Resultatet verkade också variera lite från gång till gång :)

Testade med följande kod

#!/usr/bin/perl

print "Content-type: text/html\n\n";

use Fcntl qw(:DEFAULT :flock);
open (FILE,"test.txt");
unless (flock(FILE, LOCK_SH &#0124; LOCK_NB)) {
	$&#0124; = 1;
	print "Väntar på att få låsa filen...";
	}
@lines = <FILE>;
sleep 5;
close(FILE);

open (FILE, ">test.txt");
unless (flock(FILE, LOCK_EX &#0124; LOCK_NB)) {
	$&#0124; = 1;
	print "Väntar på att få låsa filen...";
	}
print FILE "$ENV{'HTTP_USER_AGENT'}\n";
sleep 5;
close(FILE);

print "Skrivningen klar\n";
exit;

Testade samtidigt med IE och NS och vilken som fick vänta på sin tur, verkade vara slumpen som avgjorde. Även om man "tjuvstartade" den ena läsaren med flera sekunder, så blev det ofta densamma som fick väntmeddelandet.

Fast det kanske ska vara så...

Peter_BMedlem sedan apr. 2000642 inlägg
#5

ingen aning.. brukar inte låsa filer så mycket. bara när man skriver så kan det ju behövas. låser du upp filerna när du är klar?

------------------
PeterSign v 2.3.36

FlashXMedlem sedan nov. 19991 033 inlägg
#6

Nä, inte manuellt.
Vad jag förstått så sker det automatiskt då filhandtaget stängs.

stevenetMedlem sedan juni 20001 251 inlägg
#7

Japp, låset ska släppa när man stänger filen.

------------------
SteveNet - stevenet@webmarkit.net
Cogito ergo doleo.

121 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
118 ms — hämta tråd, inlägg och bilagor (db)