内容

名称

File::Temp - 安全地返回临时文件的名称和句柄

版本

版本 0.2311

概要

use File::Temp qw/ tempfile tempdir /;

$fh = tempfile();
($fh, $filename) = tempfile();

($fh, $filename) = tempfile( $template, DIR => $dir);
($fh, $filename) = tempfile( $template, SUFFIX => '.dat');
($fh, $filename) = tempfile( $template, TMPDIR => 1 );

binmode( $fh, ":utf8" );

$dir = tempdir( CLEANUP => 1 );
($fh, $filename) = tempfile( DIR => $dir );

对象接口

require File::Temp;
use File::Temp ();
use File::Temp qw/ :seekable /;

$fh = File::Temp->new();
$fname = $fh->filename;

$fh = File::Temp->new(TEMPLATE => $template);
$fname = $fh->filename;

$tmp = File::Temp->new( UNLINK => 0, SUFFIX => '.dat' );
print $tmp "Some data\n";
print "Filename is $tmp\n";
$tmp->seek( 0, SEEK_END );

$dir = File::Temp->newdir(); # CLEANUP => 1 by default

以下接口是为了与现有 API 保持兼容性而提供的。它们不应该在新的代码中使用。

MkTemp 家族

use File::Temp qw/ :mktemp  /;

($fh, $file) = mkstemp( "tmpfileXXXXX" );
($fh, $file) = mkstemps( "tmpfileXXXXXX", $suffix);

$tmpdir = mkdtemp( $template );

$unopened_file = mktemp( $template );

POSIX 函数

use File::Temp qw/ :POSIX /;

$file = tmpnam();
$fh = tmpfile();

($fh, $file) = tmpnam();

兼容性函数

$unopened_file = File::Temp::tempnam( $dir, $pfx );

描述

File::Temp 可用于以安全的方式创建和打开临时文件。它同时提供函数接口和面向对象接口。File::Temp 构造函数或 tempfile() 函数可用于返回临时文件的名称和打开的文件句柄。tempdir() 函数可用于创建临时目录。

临时文件创建的安全方面得到了强调,因此文件句柄和文件名一起返回。这有助于保证不会发生竞争条件,即在检查文件是否存在和打开文件之间,另一个进程创建了该临时文件。提供了额外的安全级别来检查,例如,世界可写目录上是否设置了粘滞位。有关更多信息,请参见 "safe_level"

为了与流行的 C 库函数保持兼容,提供了 Perl 实现的 mkstemp() 函数族。这些函数包括 mkstemp()、mkstemps()、mkdtemp() 和 mktemp()。

此外,如果需要,还提供了标准 POSIX tmpnam() 和 tmpfile() 函数的实现。

提供了 mktemp()、tmpnam() 和 tempnam() 的实现,但应谨慎使用,因为它们只返回在调用函数时有效的文件名,因此不能保证在调用者打开文件名时文件不存在。

这些函数返回的文件句柄支持可寻址方法。

面向对象接口

这是与 File::Temp 交互的主要接口。使用 OO 接口,可以在构造对象时创建临时文件,并在不再需要对象时删除文件。

请注意,没有从 File::Temp 对象获取文件句柄的方法。对象本身充当文件句柄。对象是一个 IO::Handle 并且是一个 IO::Seekable,因此所有这些方法都可用。

此外,对象被配置为将其字符串化为临时文件的名称,因此可以直接与文件名进行比较。它被数字化为 refaddr,与其他句柄相同,因此可以使用 == 与其他句柄进行比较。

$fh eq $filename       # as a string
$fh != \*STDOUT        # as a number

自 0.14 版起可用。

new

创建一个临时文件对象。

my $tmp = File::Temp->new();

默认情况下,对象被构造为好像 tempfile 被调用时没有选项,但具有额外的行为,即如果 UNLINK 设置为 true(默认值),则临时文件将被对象析构函数删除。

支持的参数与 tempfile 相同:UNLINK(默认为 true)、DIR、EXLOCK、PERMS 和 SUFFIX。此外,文件名模板使用 TEMPLATE 选项指定。不支持 OPEN 选项(文件始终打开)。

$tmp = File::Temp->new( TEMPLATE => 'tempXXXXX',
                       DIR => 'mydir',
                       SUFFIX => '.dat');

参数不区分大小写。

如果发生错误,可以调用 croak()。

自 0.14 版起可用。

TEMPLATE 自 0.23 版起可用

newdir

使用面向对象接口创建一个临时目录。

$dir = File::Temp->newdir();

默认情况下,目录在对象超出范围时被删除。

支持与 tempdir 函数相同的选项。请注意,使用此方法创建的目录默认设置为 CLEANUP => 1。

$dir = File::Temp->newdir( $template, %options );

可以使用前导模板或 TEMPLATE 参数指定模板。

自 0.19 版起可用。

TEMPLATE 自 0.23 版起可用。

filename

返回与该对象关联的临时文件的名称(如果对象是使用“new”构造函数创建的)。

$filename = $tmp->filename;

当对象用作字符串时,此方法会自动调用。

当前 API 自 0.14 版起可用

dirname

返回与该对象关联的临时目录的名称(如果该对象是使用“newdir”构造函数创建的)。

$dirname = $tmpdir->dirname;

当对象在字符串上下文中使用时,此方法会自动调用。

控制对象超出范围时是否取消链接文件。如果此值为 true 且 $KEEP_ALL 不为 true,则会删除该文件。

$fh->unlink_on_destroy( 1 );

默认情况下,文件会被删除。

当前 API 自 0.15 版本起可用

DESTROY

当对象超出范围时,会调用析构函数。如果构造函数调用时 UNLINK 设置为 1(如果未指定 UNLINK,则为默认状态),此析构函数将尝试取消链接文件(使用 unlink1)。

如果取消链接失败,不会给出错误。

如果对象在 fork 期间传递给子进程,则该文件将在对象在父进程中超出范围时被删除。

对于临时目录对象,除非在构造函数中使用了 CLEANUP 参数(并将其设置为 false)或在创建后修改了 unlink_on_destroy,否则该目录将被删除。请注意,如果临时目录是当前目录,则无法删除它 - 在这种情况下会发出警告。在让对象超出范围之前,请使用 chdir() 退出目录。

如果全局变量 $KEEP_ALL 为 true,则不会删除文件或目录。

FUNCTIONS

本节介绍用于生成临时文件和目录的推荐接口。

tempfile

这是生成临时文件的基本函数。可以使用各种选项更改文件的行为

$fh = tempfile();
($fh, $filename) = tempfile();

在为临时文件指定的目录中创建临时文件,如 File::Spec 中的 tmpdir() 函数所指定。

($fh, $filename) = tempfile($template);

使用提供的模板在当前目录中创建临时文件。尾随的 `X` 字符将被替换为随机字母以生成文件名。模板末尾至少必须存在四个 `X` 字符。

($fh, $filename) = tempfile($template, SUFFIX => $suffix)

与之前相同,只是在 `X` 转换之后在模板中添加了一个后缀。这对于确保临时文件名在其他应用程序需要时具有特定扩展名很有用。但请参阅结尾处的警告。

($fh, $filename) = tempfile($template, DIR => $dir);

与之前相同,只是指定了目录名。

($fh, $filename) = tempfile($template, TMPDIR => 1);

等效于指定 DIR 为“File::Spec->tmpdir”,将文件写入与未指定模板时使用的相同临时目录中。

($fh, $filename) = tempfile($template, UNLINK => 1);

与之前相同,返回文件名和文件句柄,只是在程序退出时会自动删除该文件(取决于 $KEEP_ALL)。默认情况下,如果请求文件句柄,则会删除该文件;如果请求文件名,则会保留该文件。在标量上下文中(不返回文件名的情况下),文件始终在退出时或关闭时被删除(除非在创建临时文件时 $KEEP_ALL 为 true)。

如果需要对文件删除时间进行细粒度控制,请使用面向对象的接口。

如果未指定模板,则始终会自动生成模板。此临时文件将放置在 tmpdir() (File::Spec) 中,除非使用 DIR 选项显式指定目录。

$fh = tempfile( DIR => $dir );

如果在标量上下文中调用,则仅返回文件句柄,并且在支持此功能的操作系统上关闭时,文件将自动删除(请参阅本文档中其他地方对 tmpfile() 的描述)。这是首选的操作模式,因为如果您只有文件句柄,则永远不会通过弄乱文件名来创建竞争条件。在无法取消链接打开文件或无法在打开时将文件标记为临时文件(例如,Windows NT 使用 O_TEMPORARY 标志)的系统上,该文件将在程序结束时标记为删除(等效于将 UNLINK 设置为 1)。如果存在,UNLINK 标志将被忽略。

(undef, $filename) = tempfile($template, OPEN => 0);

这将根据模板返回文件名,但不会打开此文件。不能与 UNLINK 设置为 true 一起使用。默认情况下始终打开文件以防止可能的竞争条件。如果打开警告,则会发出警告。如果不需要打开文件,请考虑使用本文档中其他地方描述的 tmpnam() 和 mktemp() 函数。

要使用 O_EXLOCK 打开临时文件句柄(以独占文件锁打开),请使用 EXLOCK=>1。这仅受某些操作系统支持(最著名的是 BSD 派生系统)。默认情况下,EXLOCK 将为 false。以前的 File::Temp 版本将 EXLOCK 设置为 true,因此为了确保即使在旧版本中也能获得未锁定的文件句柄,请显式设置 EXLOCK=>0

($fh, $filename) = tempfile($template, EXLOCK => 1);

默认情况下,临时文件以 0600 文件权限创建。使用 PERMS 更改此设置。

($fh, $filename) = tempfile($template, PERMS => 0666);

可以根据需要组合选项。

如果出现错误,将 croak()。

自 0.05 版本起可用。

UNLINK 标志自 0.10 版本起可用。

TMPDIR 标志自 0.19 版本起可用。

EXLOCK 标志自 0.19 版本起可用。

PERMS 标志自 0.2310 版本起可用。

tempdir

这是创建临时目录的推荐接口。默认情况下,目录在退出时不会被删除(也就是说,它不会是临时的;由于向后兼容性问题,此行为无法更改)。要启用删除,可以使用 CLEANUP 选项,该选项将在程序退出时触发删除,或者考虑使用对象接口中的“newdir”方法,该方法允许在对象超出范围时清理目录。

函数的行为取决于参数

$tempdir = tempdir();

在 tmpdir() 中创建一个目录(参见 File::Spec)。

$tempdir = tempdir( $template );

从提供的模板创建目录。此模板类似于 tempfile() 中描述的模板。模板末尾的“X”字符将被替换为随机字母以构造目录名称。模板中至少要有四个“X”字符。

$tempdir = tempdir ( DIR => $dir );

指定用于临时目录的目录。临时目录名称是从内部模板派生的。

$tempdir = tempdir ( $template, DIR => $dir );

将提供的目录名称附加到模板前面。模板本身不应包含父目录规范。在附加提供的目录之前,将从模板中删除所有父目录规范。

$tempdir = tempdir ( $template, TMPDIR => 1 );

使用提供的模板,在临时文件的标准位置创建临时目录。等同于执行

$tempdir = tempdir ( $template, DIR => File::Spec->tmpdir);

但更短。父目录规范从模板本身中剥离。如果显式设置了 DIR,则忽略 TMPDIR 选项。此外,如果未提供模板或目录,则隐含 TMPDIR。

$tempdir = tempdir( $template, CLEANUP => 1);

使用提供的模板创建临时目录,但在程序退出时尝试删除它(以及其中的所有文件)。请注意,即使这些文件不是由本模块创建的,也会尝试从目录中删除所有文件(否则为什么要要求清理它们?)。目录删除使用 File::Path 模块中的 rmtree() 函数完成。当然,如果未指定模板,则将在 tmpdir() 中创建临时目录,并且也会在程序退出时删除它。

如果出现错误,将 croak()。

自 0.05 版起提供的当前 API。

MKTEMP 函数

以下函数是 mktemp() 系列临时文件生成系统调用的 Perl 实现。

mkstemp

给定一个模板,返回指向临时文件的句柄和文件的名称。

($fh, $name) = mkstemp( $template );

在标量上下文中,只返回文件句柄。

模板可以是任何文件名,后面附加了一些 X,例如 /tmp/temp.XXXX。尾随的 X 将被替换为唯一的字母数字组合。

如果出现错误,将 croak()。

自 0.05 版起提供的当前 API。

mkstemps

类似于 mkstemp(),只是可以提供一个额外的参数,该参数包含要附加到模板的后缀。

($fh, $name) = mkstemps( $template, $suffix );

例如,使用testXXXXXX作为模板,.dat作为后缀,将生成类似于testhGji_w.dat的文件。

在标量上下文中调用时,仅返回文件句柄。

如果出现错误,将 croak()。

自 0.05 版起提供的当前 API。

mkdtemp

从模板创建目录。模板必须以 X 结尾,这些 X 将被例程替换。

$tmpdir_name = mkdtemp($template);

返回创建的临时目录的名称。

目录必须由调用者删除。

如果出现错误,将 croak()。

自 0.05 版起提供的当前 API。

mktemp

返回一个有效的临时文件名,但不保证该文件不会被其他人打开。

$unopened_file = mktemp($template);

模板与 mkstemp() 所需的模板相同。

如果出现错误,将 croak()。

自 0.05 版起提供的当前 API。

POSIX 函数

本节介绍了使用本模块中的 mkstemp() 对 POSIX 中描述的 tmpnam() 和 tmpfile() 函数的重新实现。

POSIX 实现不同,用于临时文件的目录不是在系统包含文件 (P_tmpdir) 中指定,而是简单地取决于 File::Spec 返回的 tmpdir() 的选择。在某些实现中,可以使用 TMPDIR 环境变量设置此位置,这可能不安全。如果这是一个问题,只需使用 mkstemp() 并指定一个模板。

tmpnam

在标量上下文中调用时,返回临时文件的完整名称(包括路径)(使用 mktemp())。唯一的检查是该文件不存在,但不能保证该条件将继续适用。

$file = tmpnam();

在列表上下文中调用时,将返回打开文件的句柄和文件名。这是通过在构建合适的模板后调用 mkstemp() 来实现的。

($fh, $file) = tmpnam();

如果可能,应使用此形式来防止可能的竞争条件。

有关特定操作系统的临时目录选择的信息,请参见 "File::Spec 中的 tmpdir"

如果出现错误,将 croak()。

自 0.05 版起提供的当前 API。

tmpfile

返回临时文件的句柄。

$fh = tmpfile();

当文件句柄关闭或程序退出时,该文件将被删除。不提供对文件名的访问。

如果无法创建临时文件,则返回 undef。目前,当临时目录位于 NFS 文件系统上时,此命令可能无法正常工作。

如果出现错误,将 croak()。

自 0.05 版本起可用。

在 0.12 中添加了无法创建文件时返回 undef。

附加函数

这些函数是为了向后兼容常见的 tempfile 生成 C 库函数而提供的。

它们没有导出,必须使用完整的包名来访问。

tempnam

使用前缀返回指定目录中临时文件的名称。该文件在调用函数时保证不存在,但此类保证仅在一次时钟滴答内有效。如果您必须打开此类文件名,请始终使用 sysopen 的正确形式,并使用 O_CREAT | O_EXCL

$filename = File::Temp::tempnam( $dir, $prefix );

等效于使用 $dir/$prefixXXXXXXXX 运行 mktemp()(以 unix 文件约定为例)

由于此函数使用 mktemp(),因此可能存在竞争条件。

如果出现错误,将 croak()。

自 0.05 版起提供的当前 API。

实用函数

用于处理文件句柄和文件名的有用函数。

unlink0

给定一个打开的文件句柄和关联的文件名,进行安全的 unlink 操作。这通过首先检查文件名和文件句柄最初是否指向同一个文件,以及该文件的链接数是否为 1(比较 stat() 返回的所有字段)来实现。然后,文件名被 unlink,并再次检查文件句柄以验证该文件的链接数现在是否为 0。这是您最接近确保 unlink 的文件名与您持有的描述符对应的文件相同的方法。

unlink0($fh, $path)
   or die "Error unlinking file $path safely";

错误时返回 false,但如果存在安全异常,则会 croak()。文件句柄不会关闭,因为在某些情况下不需要关闭。

在某些平台上,例如 Windows NT,无法 unlink 打开的文件(必须先关闭文件)。在这些平台上,实际的 unlink 操作将推迟到程序结束,并返回良好状态。仍然会执行检查以确保文件句柄和文件名指向同一事物(但不会在执行结束块时执行,因为推迟的删除可能无法访问文件句柄)。

此外,在 Windows NT 上,并非所有 stat() 返回的字段都可以比较。例如,devrdev 字段似乎不同。此外,似乎 stat() 返回的文件大小并不总是相同,stat(FH)stat(filename) 更准确,可能是由于缓存问题,即使使用自动刷新(这通常可以通过在尝试 unlink0 之前等待一段时间写入临时文件来克服)。

最后,在 NFS 文件系统上,文件句柄的链接计数并不总是立即在 unlink 后变为零。目前,此命令预计在 NFS 磁盘上会失败。

如果全局变量 $KEEP_ALL 为真,并且支持对打开文件的 unlink,则此函数被禁用。如果 unlink 要推迟到 END 块,则该文件仍将被注册以供删除。

如果您正在使用面向对象的接口,则不应调用此函数,因为它会干扰对象析构函数删除文件。

自 0.05 版起可用。

如果无法取消链接打开的文件,则延迟删除,直到自 0.06 版起可用。

cmpstat

比较文件句柄的 stat 与提供的文件名的 stat。这可用于检查文件名和文件句柄最初是否指向同一个文件,以及指向该文件的链接数是否为 1(比较 stat() 返回的所有字段)。

cmpstat($fh, $path)
   or die "Error comparing handle with file";

如果统计信息不同或链接计数大于 1,则返回 false。如果存在安全异常,则调用 croak。

在某些平台(例如 Windows)上,无法比较 stat() 返回的所有字段。例如,devrdev 字段在 Windows 中似乎不同。此外,stat() 返回的文件大小似乎并不总是相同,stat(FH)stat(filename) 更准确,可能是因为即使使用自动刷新也会出现缓存问题(这通常可以通过在尝试 unlink0 之前等待一段时间写入临时文件来克服)。

默认情况下不导出。

当前 API 自 0.14 版起可用。

unlink1

类似于 unlink0,但使用 cmpstat 比较文件后,在尝试取消链接文件之前关闭文件句柄。这允许删除文件而不使用 END 块,但这意味着 unlink0 提供的文件句柄状态的取消链接后比较不可用。

unlink1($fh, $path)
   or die "Error closing and unlinking file";

通常在使用 OO 接口时从对象析构函数调用。

默认情况下不导出。

如果全局变量 $KEEP_ALL 为 true,则此函数被禁用。

如果在 stat() 比较期间存在安全异常,则可以调用 croak()。

当前 API 自 0.14 版起可用。

cleanup

调用此函数将导致任何注册要删除的临时文件或临时目录被删除。这在进程退出时会自动发生,但如果调用者确定不需要任何临时文件,则可以手动触发。此方法可以注册为 Apache 回调。

请注意,如果临时目录是您的当前目录,则无法删除它。在调用 cleanup() 之前,先使用 chdir() 退出目录。(对于程序退出时设置 CLEANUP 标志的清理,这会自动发生。)

在临时文件在关闭时自动删除的 OS 上,调用此函数除了删除临时目录(可能包括临时文件)外不会有任何其他效果。

File::Temp::cleanup();

默认情况下不导出。

当前 API 自 0.15 版起可用。

包变量

这些函数控制包的全局状态。

safe_level

控制模块在继续之前检查临时文件或目录安全性的程度。选项有

STANDARD

执行基本安全措施以确保目录存在且可写,临时文件仅在不存在时才打开,并避免可能的竞争条件。最后,使用 unlink0 函数安全地删除文件。

MEDIUM

除了 STANDARD 安全性之外,还会检查输出目录以确保它由 root 或运行程序的用户拥有。如果目录可由组或其他用户写入,则会检查粘滞位是否已设置。

在不支持 -k 粘滞位测试的平台上将不起作用。

HIGH

除了 MEDIUM 安全性检查之外,还会检查使用 POSIX sysconf() 函数进行“chown() 泄露”的可能性。如果存在这种可能性,则会依次检查路径中的每个目录的安全,递归地回溯到根目录。

对于不支持 POSIX _PC_CHOWN_RESTRICTED 符号的平台(例如 Windows NT),假设“chown() 泄露”是可能的,并且执行递归测试。

可以按如下方式更改级别

File::Temp->safe_level( File::Temp::HIGH );

模块不导出级别常量。

目前,您必须至少运行 perl v5.6.0 才能以 MEDIUM 或 HIGH 安全性运行。这仅仅是因为安全性测试使用来自 Fcntl 的函数,而这些函数在较旧版本的 perl 中不可用。问题是 Fcntl 的版本号在 perl 5.6.0 和 5.005_03 中相同,即使它们是不同的版本。

在不支持 HIGH 或 MEDIUM 安全级别的系统(例如 Win NT 或 OS/2)上,任何尝试更改级别的操作都将被忽略。忽略而不是引发异常的决定允许编写可移植程序,这些程序在可以支持此功能的系统上考虑高安全性,而不会在这些额外的测试无关紧要的系统上失败。

如果您确实需要查看更改是否已被接受,只需检查 safe_level 的返回值。

$newlevel = File::Temp->safe_level( File::Temp::HIGH );
die "Could not change to high security"
    if $newlevel != File::Temp::HIGH;

自 0.05 版本起可用。

TopSystemUID

这是当前系统上指向 root UID 的最高 UID。这用于确保临时目录由系统 UID(rootbinsys 等)拥有,而不是仅仅由 root 拥有。

这是必需的,因为在许多 Unix 系统上,/tmp 不属于 root。

默认情况下,假设任何小于或等于 10 的 UID 都是 root UID。

File::Temp->top_system_uid(10);
my $topid = File::Temp->top_system_uid;

如果需要,可以调整此值以减少安全检查。此值仅在 safe_level 设置为 MEDIUM 或更高时才相关。

自 0.05 版本起可用。

$KEEP_ALL

控制是否应保留临时文件和目录,而不管程序中是否有任何指令自动删除它们。这对于调试很有用,但不应在生产代码中使用。

$File::Temp::KEEP_ALL = 1;

默认情况下,文件将根据调用者的请求删除。

在某些情况下,只有在创建文件时此变量为真时,文件才会保留。这意味着您无法创建临时文件,设置此变量并期望临时文件在程序退出时仍然存在。

$DEBUG

控制是否应启用调试消息。

$File::Temp::DEBUG = 1;

默认情况下,调试模式处于禁用状态。

自 0.15 版本起可用。

警告

为了最大限度地提高安全性,请始终努力避免查看、触摸或甚至推断文件名是否存在。您不知道该文件名是否与您拥有的句柄连接到同一个文件,并且尝试检查这一点只会触发更多竞争条件。使用文件句柄本身并完全放弃文件名要安全得多。

如果您需要将句柄传递给需要文件名的内容,那么在 Unix 系统上,您可以使用 "/dev/fd/" . fileno($fh) 用于任意程序。使用 open 的 2 参数版本的 Perl 代码可以传递 "+<=&" . fileno($fh)。否则,您将需要传递文件名。您需要在将文件描述符传递给另一个进程之前清除该文件描述符上的 close-on-exec 位。

use Fcntl qw/F_SETFD F_GETFD/;
fcntl($tmpfh, F_SETFD, 0)
    or die "Can't clear close-on-exec flag on temp fh: $!\n";

临时文件和 NFS

使用驻留在 NFS 文件系统上的临时文件存在一些问题,建议尽可能使用本地文件系统。当临时文件不是本地文件时,某些安全测试很可能会失败。此外,请注意,通过 NFS 进行 I/O 操作的性能将不如本地磁盘。

分叉

在某些情况下,由 File::Temp 创建的文件是从 END 块中删除的。由于 END 块在子进程退出时触发(除非子进程使用 POSIX::_exit()),File::Temp 会注意只删除由特定进程 ID 创建的那些临时文件。这意味着子进程不会尝试删除父进程创建的临时文件。

如果您并行创建许多进程,并且所有进程都在创建临时文件,您可能需要在每个子进程中使用 srand(EXPR) 重置随机数种子,否则所有子进程将尝试遍历相同的随机文件名集,并且如果它们超过重试次数,可能会导致它们自己放弃。

目录删除

请注意,如果您已 chdir 到临时目录,并且该目录随后被清理(在 END 块中或作为对象销毁的一部分),那么您将收到来自 File::Path::rmtree() 的警告。

污染模式

如果您需要在污染模式下运行代码,强烈建议您更新到最新的 File::Spec。在 Windows 上,如果 File::Spec::tmpdir 给出的目录不可写,File::Temp 将尝试回退到用户的本地应用程序数据目录或使用错误 croak。

BINMODE

File::Temp 返回的文件将以二进制模式打开,如果这种模式可用。如果这是不正确的,请使用 binmode() 函数更改文件句柄的模式。

请注意,您也可以使用 binmode() 修改 File::Temp 打开的文件的编码。

历史

最初于 1999 年 5 月开始作为系统 mkstemp() 函数的 XS 接口。在 2000 年 3 月,OpenBSD mkstemp() 代码被翻译成 Perl,以完全控制代码的安全检查,确保无论操作系统如何都存在该函数,并帮助移植。该模块从 v5.6.1 开始作为 perl 的标准部分发布。

感谢 Tom Christiansen 建议编写此模块并为代码改进和安全增强提供想法。

另请参阅

"tmpnam" in POSIX, "tmpfile" in POSIX, File::Spec, File::Path

有关临时文件处理的不同实现,请参阅 IO::FileFile::MkTemp, Apache::TempFile

有关 tempdir 函数的替代面向对象包装器,请参阅 File::Tempdir

支持

可以通过 RT 错误追踪器(或 [email protected])提交错误。

该发行版还提供了一个用户邮件列表,地址为 http://lists.perl.org/list/cpan-workers.html

该发行版还提供了一个 IRC 频道,地址为 irc.perl.org 上的 #toolchain

作者

Tim Jenness <[email protected]>

贡献者

版权和许可

本软件版权 (c) 2020 由 Tim Jenness 和英国粒子物理和天体物理研究委员会所有。

这是一个自由软件;您可以在 Perl 5 编程语言系统本身的相同条款下重新发布和/或修改它。