File:  [Local Repository] / db / prgsrc / counter7.pl
Revision 1.5: download - view: text, annotated - select for diffs - revision graph
Tue Jan 15 03:34:31 2002 UTC (22 years, 3 months ago) by roma7
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

#!/usr/bin/perl
$wait=3;
$header="Content-Type: text/html\n\n";
print $header;

$cfile	= 'count7';
$cfiledir = '/tmp';
chdir $cfiledir;

open STDERR, ">errors" or print "Oppa";
$lockdir="";
$lockdir=$cfiledir;
$l = lc $ENV{'DOCUMENT_NAME'};
if ($a=&lockfile)
  { print "$a ?? раз"; 
    exit ;
  }

open(F, "$cfile");
@DATA = <F>;
close(F);
foreach (@DATA) {
  ($c, $bl) = split / - /;
  chomp $bl;
  if ($bl eq $l)
  {
    $c++;
    $_ = "$c - $bl\n";
    $tmp = "$cfile$$.tmp";
    open(F, ">$tmp");
    print F @DATA;
    close(F);
    rename("$tmp", $cfile);
    print "$c раз".&Suffix($c);
    &unlockfile ;
    exit
  }
}

open(F, ">>$cfile");
print F "1 - $l\n"; 
close(F);

print "первый раз";
&unlockfile;

sub lockfile
{  
   $tmp="$cfile$$.tmp";
   $lock="$cfile.loc";
   open F,">$tmp" or (print $@,return 1);
   print F $$;
   close F;
   if (-e $lock) {
    for (1..$wait){
       sleep(1); 
       last unless -e $lock
    }
   }
   if ((-e $lock) && (-M $lock<0)){unlink $tmp;
return 2}
   elsif (!rename($tmp,$lock)) {return 3}
   open(LOCK,"<$lock") or return 3;
   $lock_pid=<LOCK>;
   close(LOCK);
   return 2 unless $lock_pid == $$;
   return 0; 
}

sub unlockfile
{
  open (LOCK, "<$lock") or return 1;
  $lock_pid=<LOCK>;
  close(LOCK);
  return 2 unless $lock_pid==$$;
  unlink($lock) or return 3;
  return 0;
}


sub Suffix {
	my ($qnum) = @_;
   my ($suffix) = 'а' if $qnum =~ /[234]$/;
   $suffix = '' if $qnum =~ /156789$/ || $qnum =~ /1.$/;
   return $suffix;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>