std::tmpfile
來自 cppreference.com
定義於標頭檔案 <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++17) |
返回適合臨時檔案的目錄 (函式) |
C 文件 關於 tmpfile
|