#opens counter data file open(COUNTERDAT,"./counter.dat"); #locks file, and if can't, goes back to READCOUNTER to try again flock COUNTERDAT, 1 or next READCOUNTER;
...and later...
#opens counter data file again open(COUNTERDAT,">./counter.dat"); #locks file, and if can't, goes back to WRITECOUNTER flock COUNTERDAT, 2 or next WRITECOUNTER;
What happens when open(COUNTERDAT,">./counter.dat"); runs and then your operating system switches to another process which runs
open(COUNTERDAT,"./counter.dat"); flock COUNTERDAT, 1 or next READCOUNTER;
Answer: The second process now has the file locked but the contents was destroyed with the open from the first process. The second process will see that the count is zero and will write '1' to the file. The solution is to open the file for reading/writing: open(COUNTERDAT, "<+./counter.dat"); then seek to the beginning of the file when you want to write the new number (if you were potentially writing a smaller byte count you would want to truncate the file, but since a number will always be at least as long as the previous number (assuming positives) this is not necessary).

In reply to Re: newbie writing a counter by nardo
in thread newbie writing a counter by jrbush82

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • 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, details, 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, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            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.