std::tmpfile
STD::tmpfile
Defined in header | | |
---|---|---|
std::FILE* tmpfile( | | |
创建并打开具有唯一自动生成文件名的临时文件。
该文件以二进制文件的形式打开,以便通过以下方式更新%28 ASstd::fopen
接入方式"wb+"
29%。至少TMP_MAX
可以在程序的生存期内打开文件%28,此限制可与std::tmpnam
而且可能会进一步受到以下因素的限制FOPEN_MAX
29%。
如果程序关闭文件,例如通过执行std::fclose
文件自动删除。
如果程序通常通过调用%28终止std::exit
,从main
,etc%29,所有通过调用打开的文件std::tmpfile
也会自动删除。
如果程序异常终止,则如果删除这些临时文件,则为实现定义。
参数
%280%29
返回值
关联的文件流或NULL
如果发生错误。
注记
在某些实现上%28例如。Linux%29,此函数实际上创建、打开并立即从文件系统删除文件:只要程序保存已删除文件的打开文件描述符,该文件就存在,但由于文件已被删除。它的名称不会出现在任何目录中,因此没有其他进程可以打开它。一旦文件描述符关闭,文件系统就会回收文件占用的空间。
在某些实现上%28例如。Windows%29,需要提升的特权,因为函数可能在系统目录中创建临时文件。
例
二次
#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-specific method to display the tmpfile name
std::cout << fs::read_symlink(
fs::path("/proc/self/fd") / std::to_string(fileno(tmpf))
) << '\n';
}
二次
可能的产出:
二次
Hello
"/tmp/tmpfBlY1lI (deleted)"
二次
另见
tmpnam | returns a unique filename (function) |
---|---|
temp_directory_path (C++17) | returns a directory suitable for temporary files (function) |
tmpfile的C文档
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。