名称
mktemp – 制作一个唯一的临时文件名
概要
#include <stdio.h>
char *mktemp(char *template);
对于glibc来说要有功能测试宏才能使用(参考feature_test_macros):
mktemp():
从glibc 2.3.3开始:
_BSD_SOURCE || _SVID_SOURCE ||
(_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
!(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
glibc 2.3.3之前:
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
说明
永远不要使用这个函数。参考BUGS。
mktemp函数以参数template生成唯一的临时文件名。template的最后六个字符必
须是XXXXXX,这些字符将被替换为使文件名唯一的字符串。由于会被修改,因此
template不能是字符串常量,而应声明为字符数组。
返回值
mktemp总是返回template,如果创建了唯一名称,则template的最后六个字节将
被修改,结果名称是唯一的(即原先不存在),如果无法创建唯一名称,template
将变为空字符串,并设置errno以指示错误。
错误码
EINVAL template的最后六个字符不是XXXXXX。
线程安全特征
接口 | 特征 | 值 |
mktemp() | 线程安全 | 多线程安全 |
标准
遵循4.3BSD, POSIX.1-2001。POSIX.1-2008删除了mktemp。
BUGS
永远不要使用这个函数,一些实现遵循4.3BSD,将XXXXXX替换为当前进程ID和单
个字母,这样最多可以返回26个不同的名称,由于一方面名称很容易猜到,另一方
面在测试名称是否存在和打开文件之间存在竞争,因此每次调用mktemp都存在安全
风险。mkstemp和mkdtemp避免了这样的竞争。
推荐阅读
mkdtemp,mkstemp,tempnam,tmpfile,tmpnam
版本记录
这个页面是Linux man-pages项目4.04版本的一部分。关于该项目的信息和bug报
道可以在该网站找到:http://www.kernel.org/doc/man-pages/。
2015-08-08