?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
Defined in header <stdio.h> | ||
---|---|---|
char *tmpnam( char *filename ); | (1) | |
errno_t tmpnam_s(char *filename_s, rsize_t maxsize); | (2) | (since C11) |
1)創(chuàng)建唯一的有效文件名(不超過(guò)L_tmpnam
長(zhǎng)度)并將其存儲(chǔ)在指向的字符串中filename
。該功能能夠生成多達(dá)TMP_MAX
獨(dú)特的文件名,但其中一些或全部可能正在文件系統(tǒng)中使用,因此不適合返回值。
2)與(1)相同,除了TMP_MAX_S
可以生成名稱(chēng)不超過(guò)L_tmpnam_s
長(zhǎng)度,并且在運(yùn)行時(shí)檢測(cè)到以下錯(cuò)誤并調(diào)用當(dāng)前安裝的約束處理函數(shù):
filename_s
是一個(gè)空指針
maxsize
大于 RSIZE_MAX
maxsize
小于生成的文件名字符串
作為所有的邊界檢查函數(shù),tmpnam_s
只能保證__STDC_LIB_EXT1__
是由實(shí)現(xiàn)定義的,并且如果用戶(hù)在包含之前定義__STDC_WANT_LIB_EXT1__
為整數(shù)常量。 1<stdio.h>
tmpnam
并tmpnam_s
修改靜態(tài)(可以在這些函數(shù)之間共享)并且不要求線(xiàn)程安全。
文件名 | - | 指向能夠保存至少L_tmpnam字節(jié)的字符數(shù)組的指針,用作結(jié)果緩沖區(qū)。如果傳遞了空指針,則返回指向內(nèi)部靜態(tài)緩沖區(qū)的指針。 |
---|---|---|
filename_s | - | 指向能夠保存至少L_tmpnam_s字節(jié)的字符數(shù)組的指針,用作結(jié)果緩沖區(qū)。 |
MAXSIZE | - | 函數(shù)允許寫(xiě)入的最大字符數(shù)(通常是filename_s數(shù)組的大?。?。 |
1)filename
如果filename
不是空指針。否則,返回指向內(nèi)部靜態(tài)緩沖區(qū)的指針。如果不能生成合適的文件名,則返回空指針。
2)返回零并將文件名寫(xiě)入filename_s
成功。在錯(cuò)誤,返回非零和空字符寫(xiě)入filename_s[0]
(僅當(dāng)filename_s
不為null且maxsize
不是零和不大于RSIZE_MAX
)。
雖然生成的名稱(chēng)tmpnam
很難猜出,但是有可能在tmpnam
返回時(shí)刻和此程序嘗試使用返回的名稱(chēng)創(chuàng)建文件之間由另一個(gè)進(jìn)程創(chuàng)建具有該名稱(chēng)的文件。標(biāo)準(zhǔn)函數(shù)tmpfile
和POSIX函數(shù)mkstemp沒(méi)有這個(gè)問(wèn)題(僅使用標(biāo)準(zhǔn)C庫(kù)創(chuàng)建唯一目錄仍然需要使用tmpnam
)。
POSIX系統(tǒng)另外定義了類(lèi)似命名的函數(shù)tempnam()
,它提供了一個(gè)目錄的選擇(默認(rèn)為可選定義的宏。P_tmpdir
)
#include <stdio.h>#include <string.h> int main(void){ char* name1 = tmpnam(NULL); printf("temporary file name: %s\n", name1); char name2[L_tmpnam]; if (tmpnam(name2)) printf("temporary file name: %s\n", name2);}
可能的輸出:
temporary file name: /tmp/fileRZHMwL temporary file name: /tmp/file420gSN
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.21.4.4 tmpnam函數(shù)(p:303-304)
K.3.5.1.2 tmpnam_s函數(shù)(p:587-588)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.19.4.4 tmpnam函數(shù)(p:269-270)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.9.4.4 tmpnam函數(shù)