tmpnam, tmpnam_s
定义于头文件 <stdio.h>
|
||
char *tmpnam( char *filename ); |
(1) | |
errno_t tmpnam_s(char *filename_s, rsize_t maxsize); |
(2) | (C11 起) |
1) 创建独有的合法文件名(长度不长于 L_tmpnam )并将它存储于
filename
所指向的字符串。此函数足以生成至多 TMP_MAX 个独有文件名,但它们中的一部分可能正在文件系统中使用,从而不适合作为返回值。2) 同 (1) ,除了至多可以创建 TMP_MAX_S 个长度不长于 L_tmpnam_s 的文件名,而且在运行时检测下列错误,并调用当前安装的制约处理函数:
-
filename_s
是空指针 -
maxsize
大于 RSIZE_MAX -
maxsize
小于生成文件名字符串的长度
-
- 同所有边界检查函数,
tmpnam_s
仅若实现定义了 __STDC_LIB_EXT1__ ,且用户在包含stdio.h
前定义 __STDC_WANT_LIB_EXT1__ 为整数常量 1 才保证可用。
tmpnam
和 tmpnam_s
修改静态状态(可能会在这些函数间共享),而且不要求是线程安全的。
参数
filename | - | 指向足以保有至少 L_tmpnam 字节的字符数组的指针,将以数组为结果缓冲区。若传递空指针,则返回指向内部静态缓冲区的指针。 |
filename_s | - | 指向足以保有至少 L_tmpnam_s 字节的字符数组的指针,将以数组为结果缓冲区。 |
maxsize | - | 允许函数写入的最大字节数(典型地为 filename_s 数组的大小)。
|
返回值
1) 若
filename
不是空指针则为 filename
。否则为指向内部静态缓冲区的指针。若不能生成适合的文件名,则返回空指针。2) 成功时返回零并将文件名写入
filename_s
。失败时,返回非零并将空字符写入 filename_s[0]
(仅若 filename_s
非空且 maxsize
非零且不大于 RSIZE_MAX )。注解
尽管 tmpnam
所生成的文件名难以猜测,却可能是另一个进程在 tmpnam
返回的时刻和此函程序试图使用返回的名称创建文件之间创建的文件的名称。标准函数 tmpfile 和 POSIX 函数 mkstemp 无此问题(仅使用 C 标准库创建一个独有的目录仍然要求使用 tmpnam
)。
POSIX 系统额外定义名称类似的函数 tempnam()
,它提供对目录的选择(默认是可选定义的宏 P_tmpdir
)。
示例
运行此代码
可能的输出:
temporary file name: /tmp/fileRZHMwL temporary file name: /tmp/file420gSN
引用
- C11 standard (ISO/IEC 9899:2011):
- 7.21.4.4 The tmpnam function (p: 303-304)
- K.3.5.1.2 The tmpnam_s function (p: 587-588)
- 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
参阅
(C11) |
返回指向临时文件的指针 (函数) |