SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Forside   Tilmelding   Postarkiv   Forum   Kalender   Søg
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

Lock fil



Så er jeg på spanden igen.

Jeg har et lille script, som laver en hit counter til en
hjemmeside. Det virker fint nok, men en sjælden gang vælger tælleren
at starte fra nul.

Jeg formoder at dette sker fordi der ikke er nogen semafor for
operationer på filen indeholdende tælleren. Hvad kan jeg gøre for at
sikre, at kun 1 bruger har fat i filen på et givent tidspunkt?

Jeg vedlægger scriptet (som jeg har hugget andetsteds fra og
modificeret lidt) som bilag:



#!/usr/bin/perl

# Gif images should be named as 0.gif, 1.gif, ..., 9.gif
#
# Permission is granted to copy and redistribute this program if this notice
# remains intact.
#
# Written by    sslug@sslug      12 Feb. 1997
# based on the "Matt's cgi counter" at http://www.worldwidemart.com/
#
# If you find "&" preceded "lt" or "gt",
#    replace these three letters by "<" or ">" respectively.

   $| = 1;
   $image = "http://www.kampsax.dtu.dk/~and/plopup/cgi-bin/gifdigits";;
   $count = $ARGV[0];

# Get counter number and increment it
   open(COUNT,"$count") || die "Can't open count data file for Reading: $!\n";
   $c = <COUNT> ;
   close(COUNT);
   if ($count =~ /\n$/) {
      chop($c);
   }
   $c++;
   open(COUNT,">$count") || die "Can't open count data file for Writing: $!\n";
####### Det er her, jeg formoder at en anden proces kan gå ind og læse 
####### en tom fil, så den starter forfra.
   print COUNT "$c";
   close(COUNT);

# Determine counter width
   $num = $length = length($c);

# Set Individual Counter Numbers Into Associative Array
   while ($num > 0) {
      $CHAR{$num} = chop($c);
      $num--;
   }

# Output gif images to Web server
   $j = 1;
#   print "<img src=\"$image/0.gif\">";
#   print "<img src=\"$image/0.gif\">";
   while ($j <= $length) {
      print "<img src=\"$image/$CHAR{$j}\.gif\">";
      $j++;
   }

exit(0);

-- 
Regards, Anders                         If a Microsoft product
(address is valid)                      fails, who do you sue?


 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

 
 
Henvendelse vedrørende websiderne til <www_admin>. Senest ændret 2005-08-10, klokken 19:52
Denne side vedligeholdes af MHonArc .