当前位置: C语言 -- 附录 -- tmpnam_s

tmpnam_s函数


概要:
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
errno_t tmpnam_s(char *s, rsize_t maxsize);

描述:

该函数生成不同于现有文件名的有效文件名。每次调用该函数会生成不同的文件名。该函数最多可生成TMP_MAX_S个不同文件名(ISO/IEC 9899:2018标准规定:宏TMP_MAX_S应至少为25。);其中的一个甚至全部可能已被现有文件使用,这种情况下不是合适的返回值。文件名字符串的长度应小于宏L_tmpnam_s

使用tmpnam_s函数生成的字符串创建的文件是临时文件,其意义在于它们的名称不会和实现中使用常规命名规则生成的名称存在冲突。此类文件使用后,程序终止前应使用remove函数删除。

假设参数s指向一个至少包含maxsize个字符的数组;该数组将存储生成的字符串。

实现应像没有库函数(tmpnam函数除外)调用tmpnam_s函数。实现可以使用tmpnam函数调用tmpnam_s函数(临时文件可能只有一个命名约定。),但这不是ISO/IEC 9899:2018标准要求的。


运行约束:

参数s不能是空指针。

参数maxsize应小于或者等于RSIZE_MAX;并且大于生成的文件名长度。


参数:
char *s

指向字符数组的指针,该数组至少能够容纳L_tmpnam_s个字节的字符。

rsize_t maxsize

参数s指向数组的最小数组长度。


返回值:

如果不能生成合适的文件名或者存在运行约束冲突,函数向s[0]写入一个空字符(前提是参数s不是空指针,参数maxsize大于0,并且不大于RSIZE_MAX。),并返回非0值;如果能够生成合适的文件名,函数将生成的文件名写入参数s指向的数组,并返回0


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
/*安全函数tmpnam_s范例*/

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>

int main(void)
{
    char arr[L_tmpnam_s];
    
    if(!(tmpnam_s(arr, L_tmpnam_s)))
        printf_s("Temporary filename: %s\n", arr);

    return 0;
}


输出:

Temporary filename: C:\Users\GENGCH~1\AppData\Local\Temp\ui2k.0

注:使用Visual Studio编译。


相关内容:
L_tmpnam_s 表示临时文件名最大长度的宏。
TMP_MAX_s 表示临时文件名最大数量的宏。