TEMPNAM - Linux手册页

时间:2019-08-20 18:01:31  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

tempnam-为临时文件创建名称

语法

#include <stdio.h>

char *tempnam(const char *dir, const char *pfx);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

tempnam():
从glibc 2.19开始:
_DEFAULT_SOURCE
Glibc 2.19及更早版本:
_BSD_SOURCE _SVID_SOURCE

说明

切勿使用此功能。请改用mkstemp(3)或tmpfile(3)。

tempnam()函数返回一个指向有效文件名的字符串的指针,这样当tempnam()被选中时,不存在具有该名称的文件。如果pfx是最多五个字节的非NULL字符串,则生成的路径名的文件名后缀将以pfx开头。生成的路径名的目录前缀部分必须"适当"(通常至少意味着可写)。

尝试找到合适的目录,请执行以下步骤:

a)
如果环境变量TMPDIR存在并且包含适当目录的名称,则使用该目录。
b)
否则,如果dir参数为非NULL且适当,则使用该参数。
c)
否则,在适当的时候使用P_tmpdir(如中所定义)。
d)
最后,可以使用实现定义的目录。

tempnam()返回的字符串是使用malloc(3)分配的,因此应该由free(3)释放。

返回值

成功后,tempnam()函数将返回一个指向唯一临时文件名的指针。如果无法生成唯一名称,并且设置了errno以指示错误原因,则它将返回NULL。

错误说明

ENOMEM
存储分配失败。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
tempnam()Thread safetyMT-Safe env

遵循规范

SVr4、4.3BSD,POSIX.1-2001。 POSIX.1-2008将tempnam()标记为已过时。

备注

尽管tempnam()生成的名称很难猜测,但是仍然有可能在tempnam()返回路径名的时间与程序打开它的时间之间,另一个程序可能会使用open(2)创建该路径名,或者将其创建为符号链接。这可能会导致安全漏洞。为避免这种可能性,请使用open(2)O_EXCL标志打开路径名。或者更好的方法是使用mkstemp(3)或tmpfile(3)。

SUSv2没有提到TMPDIR的使用。仅当程序不是set-user-ID时,glibc才会使用它。在SVr4上,在d)下使用的目录是/ tmp(这是glibc所做的)。

因为它动态分配用于返回路径名的内存,所以tempnam()是可重入的,因此与tmpnam(3)不同,因此是线程安全的。

每次调用tempnam()函数都会生成一个不同的字符串,最多可达TMP_MAX(在中定义)次。如果调用次数超过TMP_MAX次,则行为是实现定义的。

tempnam()最多使用pfx的前五个字节。

找不到唯一名称时,tempnam()的glibc实现失败,并显示错误EEXIST。

BUGS

"适当的"的确切含义是不确定的。未确定如何确定目录的可访问性。

另外参见

mkstemp(3),mktemp(3),tmpfile(3),tmpnam(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/