---
title: "use Fcntl qw(:flock);"
type: "forum-thread"
url: "https://www.webforum.nu/amne/perl-ruby/19219-use-fcntl-qw-flock"
topic: "Perl & Ruby"
topic_url: "https://www.webforum.nu/amne/perl-ruby"
author: "FlashX"
published: "2000-11-22T11:24:00.000Z"
updated: "2000-11-23T17:22:00.000Z"
replies: 6
views: 243
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/perl-ruby/19219-use-fcntl-qw-flock"
---

# use Fcntl qw(:flock);

## #1 — FlashX, 2000-11-22T11:24Z

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\]

Permalänk: https://www.webforum.nu/p/19219

## #2 — Peter_B, 2000-11-22T20:32Z

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.

Permalänk: https://www.webforum.nu/p/341322

## #3 — FlashX, 2000-11-22T23:11Z

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...

Permalänk: https://www.webforum.nu/p/341323

## #4 — FlashX, 2000-11-23T01:53Z

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å...

Permalänk: https://www.webforum.nu/p/341324

## #5 — Peter_B, 2000-11-23T09:34Z

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?

Permalänk: https://www.webforum.nu/p/341325

## #6 — FlashX, 2000-11-23T11:48Z

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

Permalänk: https://www.webforum.nu/p/341326

## #7 — stevenet, 2000-11-23T17:22Z

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

Permalänk: https://www.webforum.nu/p/341327

---

Tråden på webben: https://www.webforum.nu/amne/perl-ruby/19219-use-fcntl-qw-flock
