tmpnam_s
, _wtmpnam_s
Формирует имена, которые можно использовать для создания временных файлов. Эти функции являются версиями tmpnam
и _wtmpnam
улучшениями безопасности, как описано в функциях безопасности в CRT.
Синтаксис
errno_t tmpnam_s(
char * str,
size_t sizeInChars
);
errno_t _wtmpnam_s(
wchar_t *str,
size_t sizeInChars
);
template <size_t size>
errno_t tmpnam_s(
char (&str)[size]
); // C++ only
template <size_t size>
errno_t _wtmpnam_s(
wchar_t (&str)[size]
); // C++ only
Параметры
str
[out] Указатель, содержащий созданное имя.
sizeInChars
[in] Размер буфера в символах.
Возвращаемое значение
Обе эти функции возвращают 0 в случае успеха или номер ошибки в случае сбоя.
Условия ошибок
str |
sizeInChars |
Возвращаемое значение | Содержимое str |
---|---|---|---|
NULL |
любое | EINVAL |
не изменено |
не NULL (указывает на допустимую память) |
слишком короткий | ERANGE |
не изменено |
В противном str
NULL
случае вызывается недопустимый обработчик параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, эти функции устанавливают параметр errno
в значение EINVAL
и возвращают значение EINVAL
.
Замечания
Каждая из этих функций возвращает имя файла, который в настоящее время не существует. tmpnam_s
возвращает имя, уникальное в указанном временном каталоге Windows, возвращенном GetTempPathW
. Если имя файла добавляется с обратной косой чертой и нет сведений о пути, например \fname21
, указывает, что имя допустимо для текущего рабочего каталога.
В случае функции tmpnam_s
это сформированное имя файла можно сохранить в параметре str
. Максимальная длина строки, возвращенной tmpnam_s
— L_tmpnam_s
(задано в STDIO.H). Если параметр str
имеет значение NULL
, функция tmpnam_s
оставляет результат во внутреннем статическом буфере. Поэтому все последующие вызовы уничтожают это значение. Имя, созданное tmpnam_s
программой, состоит из имени файла, созданного программой, и после первого вызова tmpnam_s
расширение файла последовательного числа в базе 32 (.1-1vvvvvu, когда TMP_MAX_S
в STDIO). H имеет INT_MAX
значение ).
Функция tmpnam_s
автоматически обрабатывает многобайтовые строковые аргументы должным образом, распознавая последовательности многобайтовых символов согласно кодовой странице OEM, полученной из операционной системы. _wtmpnam_s
— это версия с расширенными символами для tmpnam_s
; аргумент и возвращаемое значение _wtmpnam_s
являются строками с расширенными символами. _wtmpnam_s
и tmpnam_s
ведет себя одинаково, за исключением того, что _wtmpnam_s
не обрабатывает строки многобайтовых символов.
В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устраняя необходимость указывать аргумент size. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
Подпрограмма TCHAR.H | _UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_ttmpnam_s |
tmpnam_s |
tmpnam_s |
_wtmpnam_s |
Требования
Маршрут | Обязательный заголовок |
---|---|
tmpnam_s |
<stdio.h> |
_wtmpnam_s |
<stdio.h> или <wchar.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_tmpnam_s.c
// This program uses tmpnam_s to create a unique filename in the
// current working directory.
//
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char name1[L_tmpnam_s];
errno_t err;
int i;
for (i = 0; i < 15; i++)
{
err = tmpnam_s( name1, L_tmpnam_s );
if (err)
{
printf("Error occurred creating unique filename.\n");
exit(1);
}
else
{
printf( "%s is safe to use as a temporary file.\n", name1 );
}
}
}
C:\Users\LocalUser\AppData\Local\Temp\u19q8.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.1 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.2 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.3 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.4 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.5 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.6 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.7 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.8 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.9 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.a is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.b is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.c is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.d is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.e is safe to use as a temporary file.