tmpnam_s, _wtmpnam_s

Генерирует имя, которые можно использовать для создания временных файлов. Здесь представлены версии tmpnam and _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
    Указатель, содержащий генерируемое имя.

  • [входящий] sizeInChars
    Размер буфера в символах.

Возвращаемое значение

Обе эти функции возвращают 0 при успешном завершении или номер ошибки при сбое.

Условия возникновения ошибки

str

sizeInChars

Возвращаемое значение

Содержимое str

NULL

any

EINVAL

без изменений

не NULL (указывает на допустимый адрес памяти)

слишком короткий

ERANGE

без изменений

Если параметр str имеет значение NULL, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эти функции устанавливают для errno значение EINVAL и возвращают EINVAL.

Заметки

Каждая из этих функций возвращает имя файла, который в данный момент не существует. tmpnam_s возвращает имя, уникальное в текущей рабочей папке. Заметьте, что если к началу имени файла приписывается обратная косая черта без сведений о пути, например \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. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Универсальное текстовое сопоставление функций

Подпрограмма 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 );
      }
   }  
}

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Потоковый ввод-вывод

_getmbcp

malloc

_setmbcp

tmpfile_s