std::tmpnam
来自 cppreference.cn
定义于头文件 <cstdio> |
||
char* tmpnam( char* filename ); |
||
创建一个唯一的、当前不存在的文件名,并将其存储在 filename 指向的字符串中。该函数能够生成最多 TMP_MAX 个唯一文件名,但其中一些或全部可能已被使用,因此不适合作为返回值。
std::tmpnam 修改静态状态,并且不要求是线程安全的。
内容 |
[编辑] 参数
filename | - | 指向字符数组的指针,该数组能够容纳至少 L_tmpnam 字节,用作结果缓冲区。如果传递空指针,则返回指向内部静态缓冲区的指针 |
[编辑] 返回值
如果 filename 不是空指针,则返回 filename。否则,返回指向内部静态缓冲区的指针。如果无法生成合适的文件名,则返回空指针。
[编辑] 注释
尽管 std::tmpnam 生成的名称很难猜测,但在 std::tmpnam 返回到本程序尝试使用返回的名称创建文件之间,另一个进程可能创建了具有该名称的文件。标准函数 std::tmpfile 和 POSIX 函数 mkstemp 没有这个问题(仅使用标准 C 库创建唯一目录仍然需要使用 tmpnam)。
POSIX 系统还额外定义了名称相似的函数 tempnam,它提供了目录的选择(默认为可选定义的宏 P_tmpdir)。
[编辑] 示例
运行此代码
#include <cstdio> #include <iostream> #include <string> int main() { std::string name1 = std::tmpnam(nullptr); std::cout << "temporary file name: " << name1 << '\n'; char name2[L_tmpnam]; if (std::tmpnam(name2)) std::cout << "temporary file name: " << name2 << '\n'; }
可能的输出
temporary file name: /tmp/fileDjwifs temporary file name: /tmp/fileEv2bfW
[编辑] 参见
创建并打开一个临时的、自动删除的文件 (函数) | |
(C++17) |
返回一个适合临时文件的目录 (函数) |
C 文档 for tmpnam
|