TMPNAM - Linux手册页
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)。
Interface | Attribute | Value |
tmpnam() | Thread safety | MT-Unsafe race:tmpnam/!s |
tmpnam_r() | Thread safety | MT-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()。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。