名稱空間
變體
操作

tmpfile, tmpfile_s

來自 cppreference.com
< c‎ | io
 
 
檔案輸入/輸出
型別和物件
        
函式
檔案訪問
(C95)
非格式化輸入/輸出
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

格式化輸入
直接輸入/輸出
格式化輸出
檔案定位
錯誤處理
檔案操作
tmpfiletmpfile_s
(C11)
 
定義於標頭檔案 <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 函式

[編輯] 另見

返回一個唯一的檔名
(函式) [編輯]
C++ 文件 for tmpfile