?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
在頭文件<stdio.h>中定義 | ||
---|---|---|
FILE * tmpfile(void); | (1) | |
errno_t tmpfile_s(FILE * restrict * restrict streamptr); | (2) | (自C11以來) |
1)創(chuàng)建并打開一個臨時文件。打開文件作為更新二進制文件(如如果由fopen
與"wb+"
模式)。該文件的文件名在文件系統(tǒng)中保證是唯一的。至少TMP_MAX
文件可能在程序生命周期中打開(此限制可能會與之共享tmpnam
并可能會受到進一步限制FOPEN_MAX
)。
2)與(1)相同,只是至少TMP_MAX_S
可以打開文件(可以共享限制tmpnam_s
),如果streamptr
是空指針,則調用當前安裝的約束處理程序函數(shù)。作為所有的邊界檢查函數(shù),tmpfile_s
只能保證__STDC_LIB_EXT1__
是由實現(xiàn)定義的,并且如果用戶在包含之前定義__STDC_WANT_LIB_EXT1__
為整數(shù)常量。1<stdio.h>
當程序正常退出時,由該函數(shù)創(chuàng)建的臨時文件將被關閉并刪除。它是否被異常終止刪除是實現(xiàn)定義的。
1)(無)
2)指向將由該函數(shù)調用更新的指針
1)如果發(fā)生錯誤,指向與文件或空指針關聯(lián)的文件流。
2)如果文件被創(chuàng)建并成功打開,則為零;如果文件未被創(chuàng)建或打開,或者如果streamptr
是空指針,則為非零。另外,指向相關文件流的指針會*streamptr
成功存儲,并且空*streamptr
錯誤指針值將被存儲。
在某些實現(xiàn)中(例如Linux),該函數(shù)實際上創(chuàng)建,打開并立即從文件系統(tǒng)中刪除該文件:只要程序擁有對已刪除文件的打開文件描述符,該文件就存在,但由于它是已刪除,其名稱不會出現(xiàn)在任何目錄中,以便其他進程不能打開它。一旦文件描述符關閉,或一旦程序終止(正?;虍惓#?,文件占用的空間就會被文件系統(tǒng)回收。
在某些實現(xiàn)(例如Windows)上,需要提升權限,因為該函數(shù)可能會在系統(tǒng)目錄中創(chuàng)建臨時文件。
#define _POSIX_C_SOURCE 200112L #include <stdio.h>#include <stdio.h>#include <unistd.h>int main(void){ 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);}
可能的輸出:
got back from the file: 'Hello'File name: /tmp/tmpfjptPe5 (deleted)
C11標準(ISO / IEC 9899:2011):
7.21.4.3 tmpfile函數(shù)(p:303)
K.3.5.1.1 tmpfile_s函數(shù)(p:586-587)
C99標準(ISO / IEC 9899:1999):
7.19.4.3 tmpfile函數(shù)(p:269)
C89 / C90標準(ISO / IEC 9899:1990):
4.9.4.3 tmpfile函數(shù)