Share via


tmpnam_s, _wtmpnam_s

Gere nomes que você pode usar para criar arquivos temporários.Estas são as versões do tmpnam e _wtmpnam com aprimoramentos de segurança, conforme descrito em Recursos de segurança no 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

Parâmetros

  • [out]str
    Ponteiro que conterá o nome gerado.

  • [in]sizeInChars
    O tamanho do buffer em caracteres.

Valor de retorno

Ambas as funções retornam 0 de êxito ou de um número de erro em caso de falha.

Condições de erro

str

sizeInChars

Valor de retorno

Conteúdo destr

NULL

any

EINVAL

não modificado

não NULL (aponta para memória válido)

muito curto

ERANGE

não modificado

Se str é NULL, o manipulador de parâmetro inválido é invocado, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, essas funções definir errno para EINVAL e retornar EINVAL.

Comentários

Cada uma dessas funções retorna o nome de um arquivo que não existe atualmente.tmpnam_sRetorna um nome exclusivo no diretório de trabalho atual.Observe que quando um nome de arquivo é antecedidos com uma barra invertida e nenhuma informação de caminho, como, por exemplo, \fname21, isso indica que o nome é válido para o diretório de trabalho atual.

Para tmpnam_s, você pode armazenar esse nome de arquivo gerado no str.O comprimento máximo de uma seqüência de caracteres retornada por tmpnam_s é L_tmpnam_s, definido em STDIO.H.Se str é NULL, em seguida, tmpnam_s deixa o resultado em um buffer interno de estático.Assim, todas as chamadas subseqüentes destruam este valor.O nome gerado por tmpnam_s consiste em um nome de arquivo gerado pelo programa e, após a primeira chamada para tmpnam_s, uma extensão de arquivo de números seqüenciais em 32 base (when. 1-.1vvvvvu, TMP_MAX_S em STDIO.H é INT_MAX).

tmpnam_smanipula automaticamente os argumentos de seqüência de caracteres multibyte conforme apropriado, reconhecendo as seqüências de caracteres multibyte de acordo com a página de código OEM obtidas a partir do sistema operacional._wtmpnam_sé uma versão de caractere largo de tmpnam_s; o valor de argumento e o retorno de _wtmpnam_s são seqüências de caracteres largos._wtmpnam_se tmpnam_s se comportam de forma idêntica, exceto que _wtmpnam_s não processa as seqüências de caracteres de multibyte.

No C++, a utilização dessas funções é simplificado pela sobrecargas do modelo; os métodos sobrecarregados podem inferir comprimento do buffer automaticamente, eliminando a necessidade de especificar um argumento de tamanho.Para obter mais informações, consulte Proteger Overloads de modelo.

Mapeamentos de rotina de texto genérico

TCHAR.Rotina H

_ Unicode & _ MBCS do arquivo não definido

_ MBCS do arquivo definido

_ Unicode definido

_ttmpnam_s

tmpnam_s

tmpnam_s

_wtmpnam_s

Requisitos

Rotina

Cabeçalho necessário

tmpnam_s

<stdio.h>

_wtmpnam_s

<stdio.h> ou <wchar.h>

Para obter informações adicionais de compatibilidade, consulte compatibilidade na introdução.

Exemplo

// 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 );
      }
   }  
}

Equivalência do .NET Framework

Não aplicável. Para chamar a função c padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Fluxo de i/O

_getmbcp

malloc

_setmbcp

tmpfile_s