in reply to newbie writing a counter
...and later...#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;
What happens when open(COUNTERDAT,">./counter.dat"); runs and then your operating system switches to another process which runs#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;
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).open(COUNTERDAT,"./counter.dat"); flock COUNTERDAT, 1 or next READCOUNTER;
In Section
Seekers of Perl Wisdom