[ overflow @ 18.08.2002. 11:47 ] @
Evo ga kod mog counter-a ... iznenada se brojac sa 34xx spao na 14xx ... zna li neko zasto?
Code:

#!/usr/bin/perl
$data = 'data.log';

open (F, $data);
seek (F,0,0);
$br = <F>;
close (f);

$br++;
open (F,">$data");
seek (F,0,0);
print F "$br";
close (f);

print "Content-type:text/html\n\n";
print <<EndHdr;
<font face="Verdana, Arial, Helvetica, sans-serif" color="#003366" size="2">Number of visitors: <b>$br</b><br>since 26.03.2002.</font>
EndHdr 


CHMOD
data.log = 644
count.cgi = 755
[ dukenukem @ 26.08.2002. 03:48 ] @
a dje ti je lock-ovanje?!?! verovatno si popio "racing conditions"...
[ Gojko Vujovic @ 26.08.2002. 11:43 ] @
Code:

#!/usr/bin/perl

open(IN,"counter.txt");
flock(IN,2);
seek(IN,0,0);

$count = <IN>;
close(IN);

$count = $count + 1;

open(OUT,">counter.txt");
flock(OUT,2);
seek(OUT,0,0);
print OUT "$count\n";
close(OUT);

print "Content-type:text/html\n\n";
print "$count";


Ovo je jedan moj vrlo stari counter, pre dve ili vise godina napisan.. Uglavnom, i on je imao problema i desavalo se da se resetuje, i pored koriscenih flock-ova.

Cudne stvari zar ne. Da probas koriscenjem sistemskih funkcija, cat (da procitas vrednost) i echo > (da je upises u fajl), mozda one bolje rade? Problem uglavnom nastaje kada se scirpta pokrene u istoj milisekundi i dve instance menjaju isti fajl.
[ dukenukem @ 27.08.2002. 02:35 ] @
eh, racing conditions again.
kada otvoris fajl za pisanje preko "obicnog" open brise se sadrzaj bio fajl lock-ovan ili ne. koristiti sysopen i otvarati/lockovati fajl samo jednom (ovo sam mucki testirao u paralelnim threadovima i radi bez greske):

Code:

use Fcntl qw(:DEFAULT :flock);

sysopen(FH, $filename, O_RDWR | O_CREAT) or die "can't open file: $!";
flock(FH, LOCK_EX) or die "can't write-lock file: $!";
while ( <FH> ) { $completeTxt .= $_ }

# process here

seek(FH, 0, 0) or die "can't rewind file : $!";
print FH $completeTxt or die "can't write file: $!";
truncate(FH, tell(FH)) or die "can't truncate file: $!";
close(FH) or die "can't close file: $!";


(naravno, u "process here" deo umetnuti
Code:

$completeTxt++;

u slucaju counter-a)

btw - hebesh counter - ovaj mali kod je dusu dao za on-line-backup; par regexpova da ocherupaju xml, i ne boli te glava koliko je mysql server stabilan.