Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

How do I lock a file?

( #1881=categorized question: print w/ replies, xml ) Need Help??
Contributed by vroom on Jan 08, 2000 at 08:45 UTC
Q&A  > files


Answer: How do I lock a file?
contributed by ender

Well, you can use flock():

#!/usr/bin/perl

use strict;
use Fcntl ':flock'; # import LOCK_* constants

open(MYFILE, ">testing");
flock(MYFILE, LOCK_EX);
print "file locked\n"; sleep(100);
flock(MYFILE, LOCK_UN);
print "file unlocked\n";
close MYFILE;
That will lock it as far as other processes that use flock() are concerned. Ie: if you run that, (and it locks and goes to sleep for 100 seconds) and then run another instance of it while the first is sleeping, it will wait for the other to unlock the file. However, if you run one instance of that and "echo lala > testing" it will ignore the lock and just write the file.

I don't know enough to say wether using fcntl() might yeild better results when dealing with other processes that don't try to lock the file before accessing it.

I'd say look at the perldocs on flock() and fcntl() or do some kind of cooperative locking. Ie: touch a lockfile and check it before opening the real file.

Answer: How do I lock a file?
contributed by turnstep

Update: The question that this is answering seems to have disappeared. So bear with me if the answer seems a bit strange.


Perl might even be using fcntl for the flock function: if it can't find a local version of flock that it can use, it will use fcntl instead. Generally, it's flock or nothing: just make sure that all your processes are using flock, and everything will be happy. lockf and fcntl can still be used, but they are heavy-duty solutions, and should only be brought out when really, really needed, and you really, really know what you are doing. The higher level flock is quite sufficient for almost any task

Also, make sure that you check the return values of 'flock', as well as 'open' and 'close'. Specifically unlocking a file is seldom necessary, as 'close' is guaranteed to unlock it for you.

Answer: How do I lock a file?
contributed by danstuken

Note:

if you

open(FILE, ">testing")
you will truncate the file before you have it locked, this may not be what you want in a production system! Use
open(FILE, ">>testing")
before you get the lock and then truncate() if you want to, er, truncate the file once its locked. Or lock a separate semaphore file who's contents are unimportant.

Please (register and) log in if you wish to add an answer



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others exploiting the Monastery: (15)
    As of 2014-07-23 18:26 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      My favorite superfluous repetitious redundant duplicative phrase is:









      Results (149 votes), past polls