TEMPNAM - Linux手册页
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()函数将返回一个指向唯一临时文件名的指针。如果无法生成唯一名称,并且设置了errno以指示错误原因,则它将返回NULL。
错误说明
- ENOMEM
- 存储分配失败。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
tempnam() | Thread safety | MT-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
"适当的"的确切含义是不确定的。未确定如何确定目录的可访问性。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。