Поделиться через


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 не изменено

В противном strNULLслучае вызывается недопустимый обработчик параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, эти функции устанавливают параметр 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.

См. также

Потоковый ввод-вывод
_getmbcp
malloc
_setmbcp
tmpfile_s