Annotation of db/prgsrc/counter7.pl, revision 1.5
1.1 roma7 1: #!/usr/bin/perl
2: $wait=3;
3: $header="Content-Type: text/html\n\n";
1.3 roma7 4: print $header;
1.1 roma7 5:
1.4 roma7 6: $cfile = 'count7';
1.5 ! roma7 7: $cfiledir = '/tmp';
1.4 roma7 8: chdir $cfiledir;
9:
10: open STDERR, ">errors" or print "Oppa";
11: $lockdir="";
12: $lockdir=$cfiledir;
13: $l = lc $ENV{'DOCUMENT_NAME'};
14: if ($a=&lockfile)
15: { print "$a ?? раз";
16: exit ;
17: }
18:
19: open(F, "$cfile");
1.1 roma7 20: @DATA = <F>;
21: close(F);
22: foreach (@DATA) {
23: ($c, $bl) = split / - /;
24: chomp $bl;
25: if ($bl eq $l)
26: {
27: $c++;
28: $_ = "$c - $bl\n";
1.4 roma7 29: $tmp = "$cfile$$.tmp";
1.1 roma7 30: open(F, ">$tmp");
31: print F @DATA;
32: close(F);
33: rename("$tmp", $cfile);
1.3 roma7 34: print "$c раз".&Suffix($c);
1.1 roma7 35: &unlockfile ;
36: exit
37: }
38: }
39:
40: open(F, ">>$cfile");
41: print F "1 - $l\n";
42: close(F);
43:
1.3 roma7 44: print "первый раз";
1.1 roma7 45: &unlockfile;
46:
47: sub lockfile
48: {
1.4 roma7 49: $tmp="$cfile$$.tmp";
50: $lock="$cfile.loc";
51: open F,">$tmp" or (print $@,return 1);
1.1 roma7 52: print F $$;
53: close F;
54: if (-e $lock) {
55: for (1..$wait){
56: sleep(1);
57: last unless -e $lock
58: }
59: }
60: if ((-e $lock) && (-M $lock<0)){unlink $tmp;
61: return 2}
62: elsif (!rename($tmp,$lock)) {return 3}
63: open(LOCK,"<$lock") or return 3;
64: $lock_pid=<LOCK>;
65: close(LOCK);
66: return 2 unless $lock_pid == $$;
67: return 0;
68: }
69:
70: sub unlockfile
71: {
72: open (LOCK, "<$lock") or return 1;
73: $lock_pid=<LOCK>;
74: close(LOCK);
75: return 2 unless $lock_pid==$$;
76: unlink($lock) or return 3;
77: return 0;
78: }
79:
80:
81: sub Suffix {
82: my ($qnum) = @_;
83: my ($suffix) = 'а' if $qnum =~ /[234]$/;
84: $suffix = '' if $qnum =~ /156789$/ || $qnum =~ /1.$/;
85: return $suffix;
86: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>