ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/lib/cacheout.pl
Revision: 1.1
Committed: Thu Jun 30 14:27:08 2005 UTC (21 years, 3 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #
2     # This library is no longer being maintained, and is included for backward
3     # compatibility with Perl 4 programs which may require it.
4     #
5     # In particular, this should not be used as an example of modern Perl
6     # programming techniques.
7     #
8     # Suggested alternative: FileCache
9    
10     # Open in their package.
11    
12     sub cacheout'open {
13     open($_[0], $_[1]);
14     }
15    
16     # Close as well
17    
18     sub cacheout'close {
19     close($_[0]);
20     }
21    
22     # But only this sub name is visible to them.
23    
24     sub cacheout {
25     package cacheout;
26    
27     ($file) = @_;
28     if (!$isopen{$file}) {
29     if (++$numopen > $maxopen) {
30     local(@lru) = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen);
31     splice(@lru, $maxopen / 3);
32     $numopen -= @lru;
33     for (@lru) { &close($_); delete $isopen{$_}; }
34     }
35     &open($file, ($saw{$file}++ ? '>>' : '>') . $file)
36     || die "Can't create $file: $!\n";
37     }
38     $isopen{$file} = ++$seq;
39     }
40    
41     package cacheout;
42    
43     $seq = 0;
44     $numopen = 0;
45    
46     if (open(PARAM,'/usr/include/sys/param.h')) {
47     local($_, $.);
48     while (<PARAM>) {
49     $maxopen = $1 - 4 if /^\s*#\s*define\s+NOFILE\s+(\d+)/;
50     }
51     close PARAM;
52     }
53     $maxopen = 16 unless $maxopen;
54    
55     1;