std:: tmpfile
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<cstdio>
|
||
|
std::
FILE
*
tmpfile
(
)
;
|
||
创建并打开一个具有唯一自动生成文件名的临时文件。
文件以二进制更新模式打开(如同使用访问模式 "wb+" 的 std::fopen )。在程序生命周期内至少可以打开 TMP_MAX 个文件(此限制可能与 std::tmpnam 共享,且可能受 FOPEN_MAX 进一步限制)。
如果程序关闭了文件,例如通过执行 std::fclose ,该文件将自动被删除。
如果程序正常终止(通过调用
std::exit
、从
main
返回等),所有通过调用
std::tmpfile
打开的文件也会被自动删除。
如果程序异常终止,是否删除这些临时文件由实现定义。
目录 |
参数
(无)
返回值
关联的文件流,若发生错误则为空指针。
注释
在某些实现中(例如较旧的Linux系统),此函数实际上会创建、打开并立即从文件系统中删除文件:只要程序持有已删除文件的打开文件描述符,该文件就仍然存在,但由于已被删除,其名称不会出现在任何目录中,因此其他进程无法打开它。一旦文件描述符关闭,或程序终止(正常或异常),文件所占用的空间就会被文件系统回收。较新的Linux系统(3.11或更高版本,具体取决于文件系统)通过
open()
系统调用中的特殊标志,可一步创建此类不可见的临时文件。
在某些实现中(例如 Windows),需要提升权限,因为该函数可能在系统目录中创建临时文件。
示例
#include <cstdio> #include <cstdlib> #include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { std::cout << "TMP_MAX = " << TMP_MAX << '\n' << "FOPEN_MAX = " << FOPEN_MAX << '\n'; std::FILE* tmpf = std::tmpfile(); std::fputs("Hello, world", tmpf); std::rewind(tmpf); char buf[6]; std::fgets(buf, sizeof buf, tmpf); std::cout << buf << '\n'; // Linux 特定方法显示临时文件名 std::cout << fs::read_symlink( fs::path("/proc/self/fd") / std::to_string(fileno(tmpf)) ) << '\n'; }
可能的输出:
TMP_MAX = 238328 FOPEN_MAX = 16 Hello "/tmp/tmpfBlY1lI (deleted)"
参见
|
返回唯一的文件名
(函数) |
|
|
(C++17)
|
返回适用于临时文件的目录
(函数) |
|
C 文档
关于
tmpfile
|
|