?
Ce document utilise Manuel du site Web PHP chinois Libérer
在頭文件<stdio.h>中定義 | ||
---|---|---|
char * tmpnam(char * filename); | (1) | |
errno_t tmpnam_s(char * filename_s,rsize_t maxsize); | (2) | (自C11以來) |
1)創(chuàng)建唯一的有效文件名(不超過L_tmpnam
長度)并將其存儲在指向的字符串中filename
。該功能能夠生成多達TMP_MAX
獨特的文件名,但其中一些或全部可能正在文件系統(tǒng)中使用,因此不適合返回值。
2)與(1)相同,除了TMP_MAX_S
可以生成名稱不超過L_tmpnam_s
長度,并且在運行時檢測到以下錯誤并調用當前安裝的約束處理函數(shù):
filename_s
是一個空指針
maxsize
大于 RSIZE_MAX
maxsize
小于生成的文件名字符串
作為所有的邊界檢查函數(shù),tmpnam_s
只能保證__STDC_LIB_EXT1__
是由實現(xiàn)定義的,并且如果用戶在包含之前定義__STDC_WANT_LIB_EXT1__
為整數(shù)常量。 1<stdio.h>
tmpnam
并tmpnam_s
修改靜態(tài)(可以在這些函數(shù)之間共享)并且不要求線程安全。
文件名 | - | 指向能夠保存至少L_tmpnam字節(jié)的字符數(shù)組的指針,用作結果緩沖區(qū)。如果傳遞了空指針,則返回指向內部靜態(tài)緩沖區(qū)的指針。 |
---|---|---|
filename_s | - | 指向能夠保存至少L_tmpnam_s字節(jié)的字符數(shù)組的指針,用作結果緩沖區(qū)。 |
MAXSIZE | - | 函數(shù)允許寫入的最大字符數(shù)(通常是filename_s數(shù)組的大?。?。 |
1)filename
如果filename
不是空指針。否則,返回指向內部靜態(tài)緩沖區(qū)的指針。如果不能生成合適的文件名,則返回空指針。
2)返回零并將文件名寫入filename_s
成功。在錯誤,返回非零和空字符寫入filename_s[0]
(僅當filename_s
不為null且maxsize
不是零和不大于RSIZE_MAX
)。
雖然生成的名稱tmpnam
很難猜出,但是有可能在tmpnam
返回時刻和此程序嘗試使用返回的名稱創(chuàng)建文件之間由另一個進程創(chuàng)建具有該名稱的文件。標準函數(shù)tmpfile
和POSIX函數(shù)mkstemp沒有這個問題(僅使用標準C庫創(chuàng)建唯一目錄仍然需要使用tmpnam
)。
POSIX系統(tǒng)另外定義了類似命名的函數(shù)tempnam()
,它提供了一個目錄的選擇(默認為可選定義的宏。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標準(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標準(ISO / IEC 9899:1999):
7.19.4.4 tmpnam函數(shù)(p:269-270)
C89 / C90標準(ISO / IEC 9899:1990):
4.9.4.4 tmpnam函數(shù)