std::tmpfile
来自cppreference.com
定义于头文件 <cstdio>
|
||
std::FILE* tmpfile(); |
||
创建并打开临时文件。
该文件作为二进制文件、更新模式(如同为 std::fopen 以 "wb+"
模式)打开。该文件的文件名保证在文件系统中唯一。至少可以在程序的生存期内能打开 TMP_MAX 个文件(此极限可能与 tmpnam 共享,并可能为 FOPEN_MAX 进一步限制)。
若程序关闭文件,例如通过执行 std::fclose ,则自动删除文件。
若程序正常退出(通过调用 std::exit 、从 main 返回等,则亦自动删除所有通过调用 std::tmpfile
打开的文件。
若程序非正常退出,则是否删除这些临时文件是实现定义的。
参数
(无)
返回值
关联的文件流,或若出现错误则为空指针。
注解
一些实现(如 Linux )上,此函数确实从文件系统上创建、打开并立即删除该文件:只要被删除文件的文件开启描述符为程序所管理,该文件就会存在,但只要它被删除,其名就不会出现于任何目录中,从而再无其他进程能打开它。一旦文件描述符被关闭,或一旦程序终止(正常或异常),该文件所占有的空间将被文件系统回收。
一些实现(如 Windows )上要求提升的权限,因为该函数可能在系统目录中创建临时文件。
示例
运行此代码
#include <iostream> #include <cstdio> #include <cstdlib> #include <filesystem> namespace fs = std::filesystem; int main() { 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'; }
可能的输出:
Hello "/tmp/tmpfBlY1lI (deleted)"
参阅
返回一个唯一独有的文件名 (函数) | |
(C++17) |
返回一个适用于临时文件的目录 (函数) |