std::tmpfile
来自 cppreference.cn
定义于头文件 <cstdio> |
||
std::FILE* tmpfile(); |
||
创建并打开一个具有唯一自动生成文件名的临时文件。
该文件以二进制更新模式打开(如同使用访问模式 "wb+" 的 std::fopen)。在一个程序的生命周期内,至少可以打开 TMP_MAX 个文件(此限制可能与 std::tmpnam 共享,并且可能进一步受到 FOPEN_MAX 的限制)。
如果程序关闭文件,例如通过执行 std::fclose,则文件将自动删除。
如果程序正常终止(通过调用 std::exit,从 main 返回等),则通过调用 std::tmpfile
打开的所有文件也将自动删除。
如果程序异常终止,则是否删除这些临时文件是实现定义的。
内容 |
[编辑] 参数
(无)
[编辑] 返回值
关联的文件流,如果发生错误则为 null 指针。
[编辑] 注意
在某些实现(例如较旧的 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-specific method to display the tmpfile name 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
|