tmpfile, tmpfile_s
來自 cppreference.com
定義於標頭檔案 <stdio.h> |
||
FILE* tmpfile( void ); |
(1) | |
errno_t tmpfile_s( FILE* restrict* restrict streamptr ); |
(2) | (C11 起) |
1) 建立並開啟一個臨時檔案。檔案以更新的二進位制模式開啟(如同使用 fopen 加上 "wb+" 模式)。檔案的檔名保證在檔案系統內是唯一的。在程式執行期間,至少可以開啟 TMP_MAX 個檔案(此限制可能與 tmpnam 共享,並可能受 FOPEN_MAX 進一步限制)。
2) 與 (1) 相同,但至少可以開啟 TMP_MAX_S 個檔案(此限制可能與 tmpnam_s 共享),並且如果 streamptr 是空指標,則會呼叫當前安裝的約束處理函式。
- 與所有帶邊界檢查的函式一樣,只有在實現定義了 __STDC_LIB_EXT1__ 並且使用者在包含 <stdio.h> 之前將 __STDC_WANT_LIB_EXT1__ 定義為整數常量 1 時,才保證 tmpfile_s 可用。
此函式建立的臨時檔案在程式正常退出時關閉並刪除。異常終止時是否刪除是實現定義的。
目錄 |
[編輯] 引數
1) (無)
2) 指向將被此函式呼叫更新的指標的指標。
[編輯] 返回值
1) 指向與檔案關聯的檔案流的指標,如果發生錯誤則為空指標。
2) 如果檔案建立併成功開啟則返回零,如果檔案未建立或未開啟,或者 streamptr 為空指標則返回非零。此外,成功時,指向關聯檔案流的指標儲存在 *streamptr 中;錯誤時,空指標值儲存在 *streamptr 中。
[編輯] 注意
在某些實現中(例如較舊的 Linux),此函式實際上建立、開啟並立即從檔案系統中刪除檔案:只要程式持有對已刪除檔案的開啟檔案描述符,該檔案就存在,但由於它已被刪除,其名稱不會出現在任何目錄中,因此沒有其他程序可以開啟它。一旦檔案描述符關閉,或程式終止(正常或異常),檔案佔用的空間就會被檔案系統回收。較新的 Linux(自 3.11 或更高版本,取決於檔案系統)透過 open()
系統呼叫中的特殊標誌一步建立此類不可見的臨時檔案。
在某些實現中(例如 Windows),函式可能在系統目錄中建立臨時檔案,因此需要提升許可權。
[編輯] 示例
執行此程式碼
#define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> int main(void) { printf("TMP_MAX = %d, FOPEN_MAX = %d\n", TMP_MAX, FOPEN_MAX); FILE* tmpf = tmpfile(); fputs("Hello, world", tmpf); rewind(tmpf); char buf[6]; fgets(buf, sizeof buf, tmpf); printf("got back from the file: '%s'\n", buf); // Linux-specific method to display the tmpfile name char fname[FILENAME_MAX], link[FILENAME_MAX] = {0}; sprintf(fname, "/proc/self/fd/%d", fileno(tmpf)); if (readlink(fname, link, sizeof link - 1) > 0) printf("File name: %s\n", link); }
可能的輸出
TMP_MAX = 238328, FOPEN_MAX = 16 got back from the file: 'Hello' File name: /tmp/tmpfjptPe5 (deleted)
[編輯] 參考
- C23 標準 (ISO/IEC 9899:2024)
- 7.21.4.3 tmpfile 函式 (p: TBD)
- K.3.5.1.1 tmpfile_s 函式 (p: TBD)
- C17 標準 (ISO/IEC 9899:2018)
- 7.21.4.3 tmpfile 函式 (p: 222)
- K.3.5.1.1 tmpfile_s 函式 (p: 427)
- C11 標準 (ISO/IEC 9899:2011)
- 7.21.4.3 tmpfile 函式 (p: 303)
- K.3.5.1.1 tmpfile_s 函式 (p: 586-587)
- C99 標準 (ISO/IEC 9899:1999)
- 7.19.4.3 tmpfile 函式 (p: 269)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 4.9.4.3 tmpfile 函式
[編輯] 另見
(C11) |
返回一個唯一的檔名 (函式) |
C++ 文件 for tmpfile
|