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 文档
|