tmpfile, tmpfile_s
From cppreference.net
|
定义于头文件
<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
为空指针时,将调用当前安装的
约束处理函数
。
-
与所有边界检查函数一样,仅当实现定义了
__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 函数 (p: TBD)
-
- K.3.5.1.1 tmpfile_s 函数 (p: TBD)
- 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 函数 (p: 303)
-
- K.3.5.1.1 tmpfile_s 函数 (p: 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
|
|