tmpnam, tmpnam_s

来自cppreference.com
< c‎ | io
 
 
文件输入/输出
函数
文件访问
直接输入/输出
无格式输入/输出
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
格式输入
格式输出
文件定位
错误处理
文件操作
tmpnamtmpnam_s

(C11)
 
定义于头文件 <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小于生成文件名字符串的长度
同所有边界检查函数,仅若实现定义了__STDC_LIB_EXT1__且用户在包含<stdio.h>前定义__STDC_WANT_LIB_EXT1__为整数常量1,才保证tmpnam_s可用。

tmpnamtmpnam_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)。

[编辑] 示例

#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char* name1 = tmpnam(NULL);
    printf("temporary file name: %s\n", name1);
 
    char name2[L_tmpnam];
    if (tmpnam(name2))
        printf("temporary file name: %s\n", name2);
}

可能的输出:

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

[编辑] 参阅

返回指向临时文件的指针
(函数) [编辑]
tmpnamC++文档