名稱空間
變體
操作

std::tmpfile

來自 cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
定義於標頭檔案 <cstdio>
std::FILE* tmpfile();

建立並開啟一個具有唯一自動生成檔名的臨時檔案。

檔案以二進位制更新模式開啟(如同使用 std::fopen 並指定訪問模式 "wb+")。在程式生命週期內,至少可以開啟 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-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 文件 關於 tmpfile