Compartir a través de


tmpnam_s, _wtmpnam_s

Genere los nombres que puede utilizar para crear los archivos temporales. Éstas 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.

Valor devuelto

Ambas funciones devuelven 0 si correctamente o un número de error en el error.

Condiciones de error

str

sizeInChars

Valor devuelto

Contents of str

NULL

any

EINVAL

no modificado

no NULL (señala memoria válido)

demasiado corto

ERANGE

no modificado

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

Comentarios

Cada una de estas funciones devuelve el nombre de un archivo que no existe actualmente. tmpnam_s devuelve un nombre único en el directorio de trabajo actual. La nota a un nombre de archivo con por una barra diagonal inversa y ninguna información de la 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, después tmpnam_s deja el resultado en un buffer estático interno. Para cualquier llamada subsiguiente destruye este valor. El nombre generado por tmpnam_s consta de un nombre de archivo programa- generado y, después de la primera llamada a tmpnam_s, una extensión de archivo números secuenciales en base 32 (.1-.1vvvvvu, cuando TMP_MAX_S en STDIO.H es INT_MAX).

tmpnam_s controla automáticamente argumentos de cadena de multibyte- carácter según corresponda, reconociendo secuencias de multibyte- carácter 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_s y tmpnam_s se comportan exactamente igual excepto que _wtmpnam_s no controla las cadenas de multibyte- carácter.

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, vea Sobrecargas de plantilla seguras.

Asignaciones de rutina de texto genérico

Rutina TCHAR.H

_UNICODE y _MBCS no definidos

_MBCS definido

_UNICODE definido

_ttmpnam_s

tmpnam_s

tmpnam_s

_wtmpnam_s

Requisitos

Rutina

Encabezado 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.

Ejemplo

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

Equivalente en .NET Framework

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.

Vea también

Referencia

E/S de secuencia

_getmbcp

malloc

_setmbcp

tmpfile_s