Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Counter - vrlo interesantan problem

[es] :: Perl :: Counter - vrlo interesantan problem

[ Pregleda: 3737 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

overflow
Goran Milosavljević
Integration & Internet Senior
Engineer @ Telenor
Beograd

Član broj: 396
Poruke: 345
*.verat.net

ICQ: 106825659
Sajt: localhost


Profil

icon Counter - vrlo interesantan problem18.08.2002. u 11:47 - pre 246 meseci
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
Sve sto je besmislenije, utoliko je bolje.
 
Odgovor na temu

dukenukem
Nemanja Nikolic
Beograd

Član broj: 970
Poruke: 99
*.216.EUnet.yu

ICQ: 35310908


Profil

icon Re: Counter - vrlo interesantan problem26.08.2002. u 03:48 - pre 246 meseci
a dje ti je lock-ovanje?!?! verovatno si popio "racing conditions"...
= come get some =
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+164 Profil

icon Re: Counter - vrlo interesantan problem26.08.2002. u 11:43 - pre 246 meseci
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.
 
Odgovor na temu

dukenukem
Nemanja Nikolic
Beograd

Član broj: 970
Poruke: 99
*.72.EUnet.yu

ICQ: 35310908


Profil

icon Re: Counter - vrlo interesantan problem27.08.2002. u 02:35 - pre 246 meseci
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.
= come get some =
 
Odgovor na temu

[es] :: Perl :: Counter - vrlo interesantan problem

[ Pregleda: 3737 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.