FileCache - 保持打开的文件数超过系统允许数
no strict 'refs';
use FileCache;
# or
use FileCache maxopen => 16;
cacheout $mode, $path;
# or
cacheout $path;
print $path @data;
$fh = cacheout $mode, $path;
# or
$fh = cacheout $path;
print $fh @data;
cacheout
函数将确保有一个文件句柄可用于读取或写入,具体取决于你给它的路径名。如果超过系统允许的最大文件描述符数或建议的最大值 maxopen,它会自动关闭并重新打开文件。
1 个参数形式的 cacheout 将在首次使用时打开一个文件用于写入 ('>'
),此后用于追加 ('>>'
)。
成功时返回 EXPR 以便于使用。如果你愿意,可以忽略返回值,并将 EXPR 直接作为文件句柄进行操作。
2 个参数形式的 cacheout 将对初始打开和后续打开使用提供的模式。支持 3 个参数 open
的大多数有效模式,即;'>'
、'+>'
、'<'
、'<+'
、'>>'
、 '|-'
和 '-|'
要将补充参数传递给使用 '|-'
或 '-|'
打开的程序,请将它们附加到命令字符串中,就像系统 EXPR 一样。
成功时返回 EXPR 以便于使用。如果你愿意,可以忽略返回值,并将 EXPR 直接作为文件句柄进行操作。
虽然可以 close
一个 FileCache 管理的文件,但如果从除导入该文件之外的其他包或使用覆盖 close
的另一个模块调用 FileCache::cacheout
,则不要这样做。如果必须,请使用 FileCache::cacheout_close
。
虽然 FileCache 可以与管道打开('-|' 或 '|-')一起使用,但强烈建议不要这样做。如果 FileCache 发现有必要关闭然后重新打开管道,管道另一端的命令将被重新执行 - 在 FileCache 管道上执行 IO 的结果可能与你的预期不同。在将来的版本中可能会删除在管道上使用 FileCache 的功能。
如果 FileCache 发现有必要关闭文件,它不会存储当前文件偏移量。当文件重新打开时,偏移量将如原始 open
文件模式所指定的那样。这可以被解释为一个错误。
模块功能依赖于符号引用,因此在 'use strict' 下会中断,除非还指定 'no strict "refs"'。
sys/param.h 在某些系统上使用其 NOFILE
定义,因此你可能必须自己设置 maxopen。