?
? ????? PHP ??? ???? ??? ?? ??
在頭文件<stdio.h>中定義 | ||
---|---|---|
FILE * tmpfile(void); | (1) | |
errno_t tmpfile_s(FILE * restrict * restrict streamptr); | (2) | (自C11以來(lái)) |
1)創(chuàng)建并打開一個(gè)臨時(shí)文件。打開文件作為更新二進(jìn)制文件(如如果由fopen
與"wb+"
模式)。該文件的文件名在文件系統(tǒng)中保證是唯一的。至少TMP_MAX
文件可能在程序生命周期中打開(此限制可能會(huì)與之共享tmpnam
并可能會(huì)受到進(jìn)一步限制FOPEN_MAX
)。
2)與(1)相同,只是至少TMP_MAX_S
可以打開文件(可以共享限制tmpnam_s
),如果streamptr
是空指針,則調(diào)用當(dāng)前安裝的約束處理程序函數(shù)。作為所有的邊界檢查函數(shù),tmpfile_s
只能保證__STDC_LIB_EXT1__
是由實(shí)現(xiàn)定義的,并且如果用戶在包含之前定義__STDC_WANT_LIB_EXT1__
為整數(shù)常量。1<stdio.h>
當(dāng)程序正常退出時(shí),由該函數(shù)創(chuàng)建的臨時(shí)文件將被關(guān)閉并刪除。它是否被異常終止刪除是實(shí)現(xiàn)定義的。
1)(無(wú))
2)指向?qū)⒂稍摵瘮?shù)調(diào)用更新的指針
1)如果發(fā)生錯(cuò)誤,指向與文件或空指針關(guān)聯(lián)的文件流。
2)如果文件被創(chuàng)建并成功打開,則為零;如果文件未被創(chuàng)建或打開,或者如果streamptr
是空指針,則為非零。另外,指向相關(guān)文件流的指針會(huì)*streamptr
成功存儲(chǔ),并且空*streamptr
錯(cuò)誤指針值將被存儲(chǔ)。
在某些實(shí)現(xiàn)中(例如Linux),該函數(shù)實(shí)際上創(chuàng)建,打開并立即從文件系統(tǒng)中刪除該文件:只要程序擁有對(duì)已刪除文件的打開文件描述符,該文件就存在,但由于它是已刪除,其名稱不會(huì)出現(xiàn)在任何目錄中,以便其他進(jìn)程不能打開它。一旦文件描述符關(guān)閉,或一旦程序終止(正?;虍惓#募加玫目臻g就會(huì)被文件系統(tǒng)回收。
在某些實(shí)現(xiàn)(例如Windows)上,需要提升權(quán)限,因?yàn)樵摵瘮?shù)可能會(huì)在系統(tǒng)目錄中創(chuàng)建臨時(shí)文件。
#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標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.21.4.3 tmpfile函數(shù)(p:303)
K.3.5.1.1 tmpfile_s函數(shù)(p:586-587)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.19.4.3 tmpfile函數(shù)(p:269)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.9.4.3 tmpfile函數(shù)