tmpfile, tmpfile_s
来自 cppreference.cn
定义于头文件 <stdio.h> |
||
FILE* tmpfile( void ); |
(1) | |
errno_t tmpfile_s( FILE* restrict* restrict streamptr ); |
(2) | (since C11) |
1) 创建并打开一个临时文件。该文件以二进制更新模式打开(如同使用 fopen 与 "wb+" 模式)。保证该文件的文件名在文件系统中是唯一的。在一个程序的生命周期内,至少可以打开 TMP_MAX 个文件(此限制可能与 tmpnam 共享,并可能进一步受到 FOPEN_MAX 的限制)。
2) 与 (1) 相同,除了至少可以打开 TMP_MAX_S 个文件(此限制可能与 tmpnam_s 共享),并且如果 streamptr 是空指针,则会调用当前安装的 constraint handler 函数。
- 与所有边界检查函数一样,只有当实现定义了 __STDC_LIB_EXT1__ 并且用户在包含 <stdio.h> 之前将 __STDC_WANT_LIB_EXT1__ 定义为整数常量 1 时,才能保证
tmpfile_s
可用。
由此函数创建的临时文件在程序正常退出时关闭并删除。是否在异常终止时删除是实现定义的。
目录 |
[编辑] 参数
1) (无)
2) 指向指针的指针,该指针将由此函数调用更新
[编辑] 返回值
1) 指向与文件关联的文件流的指针;如果发生错误,则为空指针。
2) 如果文件创建并成功打开,则为零;如果文件未创建或打开,或者 streamptr 为空指针,则为非零值。此外,成功时,指向关联文件流的指针存储在 *streamptr 中;错误时,空指针值存储在 *streamptr 中。
[编辑] 注释
在某些实现中(例如,旧版本的 Linux),此函数实际上会创建、打开并立即从文件系统中删除文件:只要程序持有已删除文件的打开文件描述符,该文件就存在,但由于它已被删除,因此其名称不会出现在任何目录中,因此其他进程无法打开它。一旦文件描述符关闭,或者一旦程序终止(正常或异常),文件占用的空间将由文件系统回收。较新的 Linux(自 3.11 或更高版本,取决于文件系统)通过 open()
系统调用中的特殊标志一步创建此类不可见的临时文件。
在某些实现中(例如 Windows),由于该函数可能在系统目录中创建临时文件,因此需要提升的权限。
[编辑] 示例
运行此代码
#define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> int main(void) { printf("TMP_MAX = %d, FOPEN_MAX = %d\n", TMP_MAX, FOPEN_MAX); FILE* tmpf = tmpfile(); fputs("Hello, world", tmpf); rewind(tmpf); char buf[6]; fgets(buf, sizeof buf, tmpf); printf("got back from the file: '%s'\n", buf); // Linux-specific method to display the tmpfile name char fname[FILENAME_MAX], link[FILENAME_MAX] = {0}; sprintf(fname, "/proc/self/fd/%d", fileno(tmpf)); if (readlink(fname, link, sizeof link - 1) > 0) printf("File name: %s\n", link); }
可能的输出
TMP_MAX = 238328, FOPEN_MAX = 16 got back from the file: 'Hello' File name: /tmp/tmpfjptPe5 (deleted)
[编辑] 参考
- C23 标准 (ISO/IEC 9899:2024)
- 7.21.4.3 tmpfile 函数 (页码: 待定)
- K.3.5.1.1 tmpfile_s 函数 (页码: 待定)
- C17 标准 (ISO/IEC 9899:2018)
- 7.21.4.3 tmpfile 函数 (页码: 222)
- K.3.5.1.1 tmpfile_s 函数 (页码: 427)
- C11 标准 (ISO/IEC 9899:2011)
- 7.21.4.3 tmpfile 函数 (页码: 303)
- K.3.5.1.1 tmpfile_s 函数 (页码: 586-587)
- C99 标准 (ISO/IEC 9899:1999)
- 7.19.4.3 tmpfile 函数 (页码: 269)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.9.4.3 tmpfile 函数
[编辑] 参见
(C11) |
返回唯一的文件名 (函数) |
C++ 关于 tmpfile 的文档 for tmpfile
|