C 参考手册
- C 语言
- C 关键词
- 预处理器
- C 标准库头文件
- 类型支持
- 程序支持工具
- 变参数函数
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 算法
- 数值
- 文件输入/输出
- gets, gets_s
- printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s
- fopen, fopen_s
- fputc, putc
- fputs
- getchar
- putchar
- FILE
- fpos_t
- stdin, stdout, stderr
- freopen, freopen_s
- fwide
- setbuf
- setvbuf
- fclose
- fflush
- fread
- fwrite
- fgetc, getc
- fgets
- puts
- ungetc
- fgetwc
- fgetws
- fputwc, putwc
- fputws
- getwchar
- putwchar
- ungetwc
- scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
- wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
- vscanf, vfscanf, vsscanf, vscanf_s, vfscanf_s, vsscanf_s
- vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s
- wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
- vprintf, vfprintf, vsprintf, vsnprintf, vprintf_s, vfprintf_s, vsprintf_s, vsnprintf_s
- vwprintf, vfwprintf, vswprintf, vwprintf_s, vfwprintf_s, vswprintf_s, vsnwprintf_s
- ftell
- fgetpos
- fseek
- fsetpos
- rewind
- clearerr
- feof
- ferror
- perror
- remove
- rename
- tmpfile, tmpfile_s
- tmpnam, tmpnam_s
- 本地化支持
- 原子操作库
- 线程支持库
- 实验性 C 标准库
- 有用的资源
- 符号索引
- 注释
tmpfile, tmpfile_s
定义于头文件 <stdio.h>
|
||
FILE *tmpfile(void); |
(1) | |
errno_t tmpfile_s(FILE * restrict * restrict streamptr); |
(2) | (C11 起) |
1) 创建并打开一个临时文件。该文件作为二进制文件、更新模式(如同为 fopen 以
"wb+"
模式)打开。该文件的文件名保证在文件系统中唯一。至少可以在程序的生存期内能打开 TMP_MAX 个文件(此极限可能与 tmpnam 共享,并可能为 FOPEN_MAX 所进一步限制)。2) 同 (1) ,除了至少可以打开 TMP_MAX_S 个文件(此极限可能与 tmpnam_s 共享),而若
streamptr
为空指针,则调用当前安装的制约处理函数。
- 同所有边界检查函数,
tmpfile_s
仅若实现定义了 __STDC_LIB_EXT1__ ,且用户在包含<stdio.h>
前定义 __STDC_WANT_LIB_EXT1__ 为整数常量 1 才保证可用。
此函数创建的临时文件在程序正常退出时被关闭并删除。它在程序异常终止时是否被删除是实现定义的。
参数
1) (无)
2) 指向此函数调用将要更新的指针的指针
返回值
1) 指向与文件关联的文件流的指针,或若出现错误则为空指针。
2) 若成功创建并打开文件则为零,若未创建或打开文件,或若
streamptr
为空指针则为非零。另外,成功时存储指向关联文件流的指针到 *streamptr
,而错误时存储空指针值到 *streamptr
。注意
一些实现(如 Linux )上,此函数确实从文件系统上创建、打开并立即删除该文件:只要被删除文件的文件开启描述符为程序所管理,该文件就会存在,但只要它被删除,其名就不会出现于任何目录中,从而再无其他进程能打开它。一旦文件描述符被关闭,或一旦程序终止(正常或异常),该文件所占有的空间将被文件系统回收。
一些实现(如 Windows )上要求提升的权限,因为该函数可能在系统目录中创建临时文件。
示例
运行此代码
#define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> int main(void) { 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 特定方法 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); }
可能的输出:
got back from the file: 'Hello' File name: /tmp/tmpfjptPe5 (deleted)
引用
- C17 standard (ISO/IEC 9899:2018):
- 7.21.4.3 The tmpfile function (p: 222)
- K.3.5.1.1 The tmpfile_s function (p: 427)
- C11 standard (ISO/IEC 9899:2011):
- 7.21.4.3 The tmpfile function (p: 303)
- K.3.5.1.1 The tmpfile_s function (p: 586-587)
- C99 standard (ISO/IEC 9899:1999):
- 7.19.4.3 The tmpfile function (p: 269)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.9.4.3 The tmpfile function
参阅
(C11) |
返回唯一的文件名 (函数) |