TMPNAM - Linux手册页

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

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

名称

tmpnam,tmpnam_r-为临时文件创建名称

语法

#include <stdio.h>

char *tmpnam(char *s);
char *tmpnam_r(char *s);

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

tmpnam_r()

Since glibc 2.19:
_DEFAULT_SOURCE
Up to and including glibc 2.19:
_BSD_SOURCE || _SVID_SOURCE

说明

注意:避免使用这些功能;请改用mkstemp(3)或tmpfile(3)。

tmpnam()函数返回一个指针,该指针指向一个有效的文件名字符串,这样,在某个时间点不存在具有该名称的文件,因此,天真的程序员可能会认为它是临时文件的合适名称。如果参数s为NULL,则此名称在内部静态缓冲区中生成,并且可能被下一次对tmpnam()的调用所覆盖。如果s不为NULL,则将名称复制到s指向的字符数组(长度至少为L_tmpnam),并在成功的情况下返回值s。

创建的路径名具有目录前缀P_tmpdir。 (L_tmpnam和P_tmpdir都在中定义,就像下面提到的TMP_MAX一样。)

tmpnam_r()函数执行与tmpnam()相同的任务,但是如果s为NULL,则返回NULL(指示错误)。

返回值

这些函数返回指向唯一临时文件名的指针,如果无法生成唯一名称,则返回NULL。

错误说明

没有错误定义。

属性

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

InterfaceAttributeValue
tmpnam()Thread safetyMT-Unsafe race:tmpnam/!s
tmpnam_r()Thread safetyMT-Safe

遵循规范

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

tmpnam_r()是非标准扩展,在其他一些系统上也可用。

备注

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

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

如果定义了_POSIX_THREADS或_POSIX_THREAD_SAFE_FUNCTIONS,则使用线程的可移植应用程序无法使用NULL参数调用tmpnam()。

BUGS

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

另外参见

mkstemp(3),mktemp(3),tempnam(3),tmpfile(3)

出版信息

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