std::tmpnam
来自cppreference.com
在标头 <cstdio> 定义 | ||
char* tmpnam(char* filename ); | ||
创建不指名当前已存在文件的独有文件名,并将它存储于 filename 所指向的字符串。函数足以生成至多 TMP_MAX 个独有的文件名,但其一些或全部可能已在使用中,从而不适合作为返回值。
std::tmpnam 修改静态状态,而且不要求为线程安全。
目录 |
[编辑]参数
filename | - | 指向足以保有至少 L_tmpnam 个字节的字符数组的指针,用作结果缓冲区。若传递空指针,则返回指向内部静态缓冲区的指针。 |
[编辑]返回值
若 filename 不是空指针则为 filename。否则为指向内部静态缓冲区的指针。若无法生成适合的文件名,则返回空指针。
[编辑]注解
尽管 std::tmpnam 生成的文件名难以预测,但从 std::tmpnam 返回到程序使用返回的文件名去真正创建一个文件之间,可能会有另一个进程抢用这个文件名去创建文件。标准库函数 std::tmpfile 和 POSIX 函数 mkstemp
不会有这个问题(但仅使用 C 标准库创建独一的目录仍然会要求使用 std::tmpnam
)。
POSIX 系统额外定义了一个名字类似的函数 tempnam()
,它允许你选择返回文件名所在的目录(默认使用可选定义的宏 P_tmpdir
)。
[编辑]示例
运行此代码
#include <cstdio>#include <iostream>#include <string> int main(){std::string name1 = std::tmpnam(nullptr);std::cout<<"临时文件名: "<< name1 <<'\n'; char name2[L_tmpnam];if(std::tmpnam(name2))std::cout<<"临时文件名: "<< name2 <<'\n';}
可能的输出:
临时文件名: /tmp/fileDjwifs 临时文件名: /tmp/fileEv2bfW
[编辑]参阅
创建并打开一个临时、自动移除的文件 (函数) | |
(C++17) | 返回一个适用于临时文件的目录 (函数) |
tmpnam 的 C 文档 |