tmpnam_s, _wtmpnam_s

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Generar nombres que se pueden usar para crear archivos temporales. Estas son versiones de tmpnam y _wtmpnam con mejoras de seguridad, como se describe en características de seguridad de 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
Puntero que contendrá el nombre generado.

[in] sizeInChars
El tamaño del búfer en caracteres.

Ambas funciones devuelven 0 si es correcto o un número de error en caso de error.

Condiciones de error

strsizeInCharsValor devueltoContenido de  str
NULLcualquieraEINVALno modificado
no NULL (puntos de memoria válida)demasiado cortaERANGEno modificado

Si str es NULL, se invoca el controlador de parámetros no válidos, como se describe en validación del parámetro. Si la ejecución puede continuar, estas funciones establecen errno en EINVAL y devuelven EINVAL.

Cada una de estas funciones devuelve el nombre de un archivo que no existe. tmpnam_sDevuelve un nombre único en el directorio de trabajo actual. Tenga en cuenta que cuando un nombre de archivo es anteponer una barra diagonal inversa y sin información de ruta de acceso, como \fname21, esto indica que el nombre es válido para el directorio de trabajo actual.

Para tmpnam_s, puede almacenar este nombre de archivo generado en str. La longitud máxima de una cadena devuelta por tmpnam_s es L_tmpnam_s, definido en STDIO. H. Si str es NULL, a continuación, tmpnam_s deja el resultado en un búfer interno estático. Por lo tanto, las subsiguientes llamadas destruirán este valor. El nombre generado por tmpnam_s consta de un nombre de archivo generado por el programa y, después de la primera llamada a tmpnam_s, una extensión de archivo de los números secuenciales de 32 base (.1-.1vvvvvu cuando TMP_MAX_S en STDIO. H es INT_MAX).

tmpnam_sadministra automáticamente los argumentos de cadena de caracteres multibyte según corresponda, reconociendo las secuencias de caracteres multibyte según la página de códigos OEM obtenida del sistema operativo. _wtmpnam_s es una versión con caracteres anchos de tmpnam_s; el argumento y el valor devuelto de _wtmpnam_s son cadenas de caracteres anchos. _wtmpnam_sy tmpnam_s se comportan exactamente igual, salvo que _wtmpnam_s no controla las cadenas de caracteres multibyte.

En C++, el uso de estas funciones se simplifica mediante sobrecargas de plantilla. Las sobrecargas pueden deducir la longitud del búfer automáticamente, lo que elimina la necesidad de especificar un argumento de tamaño. Para obtener más información, consulta Secure Template Overloads.

Asignaciones de rutina de texto genérico

Rutina TCHAR.H_UNICODE y _MBCS no definidos_MBCS definido_UNICODE definido
_ttmpnam_stmpnam_stmpnam_s_wtmpnam_s
RutinaEncabezado necesario
tmpnam_s<stdio.h>
_wtmpnam_s<stdio.h> o <wchar.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

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

No es aplicable. Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

E/S de secuencia
_getmbcp
malloc
_setmbcp
tmpfile_s

Mostrar: