std::tmpnam

< cpp‎ | io‎ | c
 
 
 
 
定义于头文件 <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 <iostream>
#include <cstdio>
#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

参阅

创建并打开一个临时、自动移除的文件
(函数)
返回一个适用于临时文件的目录
(函数)