国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > tmpnam 以获得更好的体验。

# C 语言标准库函数 tmpnam

在头文件 stdio.h 中定义。
非线程安全
/*********************************************
 * @brief 生成一个临时文件名
 * @param[out] filename 用于保存文件名的内存空间
 * @return 文件名
 ********************************************/
char* tmpnam(char* filename);

!subtitle:说明

生成一个临时文件名。

最多可以生成 TMP_MAX 个唯一的文件名,但是其中一些或全部可能已经被使用。

生成的文件名将保存在参数 filename 指向的内存空间中(该内存空间长度不应少于 L_tmpnam 字节),并返回 filename 本身。

如果参数 filenameNULL,则在内部静态缓冲区保存文件名,并返回该缓冲区的地址。

使用此函数生成的文件名创建的临时文件不会自动删除,需要手动调用 remove 函数删除文件。

这个函数生成文件名时,文件名是可用的。但是在该函数返回之后,创建文件之前,另一个可能创建同名文件,导致该文件名被占用。
使用 POSIX 函数 mkstemp 则不存在这个问题。

!subtitle:参数

  • filename - 指向用于保存文件名的内存空间

!subtitle:返回值

  • 成功时返回文件名

  • 失败时返回 NULL

# 示例

#include <stdio.h>

int main(void)
{
    // 参数为 NULL,返回内部静态缓冲区保存的文件名
    printf("%s\n", tmpnam(NULL));

    char filename[L_tmpnam]; // 保存文件名,长度为 L_tmpnam
    tmpnam(filename);
    printf("%s\n", filename);
    
    return 0;
}

运行结果:

/tmp/filemVkQ4I
/tmp/filey54nm0

说明:

参数为 NULL 时,文件名保存在内部的静态缓冲区内,返回该缓冲区的地址。

参数不为 NULL 时,文件名保存到参数指向的内存空间,该空间的长度应为 L_tmpnam 字节,返回参数本身。

# 推荐阅读

# 参考标准

  • C23 standard (ISO/IEC 9899:2024):

    • 7.21.4.4 The tmpnam function (p: TBD)

  • C17 standard (ISO/IEC 9899:2018):

    • 7.21.4.4 The tmpnam function (p: 222)

  • C11 standard (ISO/IEC 9899:2011):

    • 7.21.4.4 The tmpnam function (p: 303-304)

  • C99 standard (ISO/IEC 9899:1999):

    • 7.19.4.4 The tmpnam function (p: 269-270)

  • C89/C90 standard (ISO/IEC 9899:1990):

    • 4.9.4.4 The tmpnam function

本文 更新于: 2025-11-27 09:38:11 创建于: 2025-11-27 09:38:11