Share via


_mktemp_s, _wmktemp_s

Crea un nombre único.Éstas son versiones de _mktemp, _wmktemp con mejoras de seguridad como se describe en Características de seguridad en CRT.

errno_t _mktemp_s(
   char *template,
   size_t sizeInChars
);
errno_t _wmktemp_s(
   wchar_t *template,
   size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
   char (&template)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
   wchar_t (&template)[size]
); // C++ only

Parámetros

  • template
    perfil de nombre.

  • sizeInChars
    Tamaño del búfer en caracteres de un solo byte en _mktemp_s; caracteres anchos en _wmktemp_s, incluido el terminador nulo.

Valor devuelto

Devuelven cero de funciones en correctamente; un código de error del error.

condiciones de error

template

sizeInChars

valor devuelto

nuevo valor de plantilla

NULL

cualquier

EINVAL

NULL

Formato incorrecto (vea la sección de Remarks para el formato correcto)

cualquier

EINVAL

cadena vacía

cualquier

número de <= de X

EINVAL

cadena vacía

Si es un de los sobre condiciones de error, el controlador no válido de parámetro se invoca, como se describe en Validación de parámetros.Si la ejecución puede continuar, errno se establece en EINVAL y las funciones devuelven EINVAL.

Comentarios

La función de _mktemp_s crea un nombre de archivo único modificando el argumento de template , de modo que después de la llamada, los puntos del puntero de template en una cadena que contiene el nuevo nombre de archivo._mktemp_s controla automáticamente argumentos de cadena de caracteres multibyte según corresponda, reconociendo secuencias de caracteres multibyte según la página de códigos multibyte actualmente en uso por el sistema en tiempo de ejecución._wmktemp_s es una versión con caracteres anchos de _mktemp_s; el argumento de _wmktemp_s es una cadena de caracteres._wmktemp_s y _mktemp_s se comportan exactamente igual de otra forma, salvo que _wmktemp_s no controla las cadenas de caracteres multibyte.

Asignaciones de la rutina de texto genérico

rutina de Tchar.h

_UNICODE y _MBCS no definido

_MBCS definido

_UNICODE definido

_tmktemp_s

_mktemp_s

_mktemp_s

_wmktemp_s

El argumento de template tiene el formato, donde es la parte base del nuevo nombre de archivo que proporciona y cada X es un marcador de posición para un carácter proporcionado por _mktemp_s.Cada carácter marcador en template debe ser mayúscula X._mktemp_s conserva base y reemplaza el primer X que se arrastra por un carácter alfabético._mktemp_s reemplaza X final siguiente con un valor de cinco dígitos; este valor es un número único que identifica el proceso de llamada, o en programas multiproceso, el subproceso de llamada.

Cada llamada correcta a _mktemp_s modifica template.En cada llamada subsiguiente del mismo proceso o subproceso con el mismo argumento de template , las comprobaciones de _mktemp_s los nombres de archivo que coinciden con los nombres devueltos por _mktemp_s en llamadas anteriores.Si ningún archivo existe para un nombre especificado, _mktemp_s devuelve ese nombre.Si los archivos existen para todos los nombres previamente devueltos, _mktemp_s crea un nuevo nombre reemplazando el carácter alfabético que utilizó en el nombre previamente devuelto a minúscula disponible siguiente, en orden, de “a” a la “z”.por ejemplo, si es base :

fn

y el valor de cinco dígitos proporcionado por _mktemp_s es 12345, el nombre devuelto es:

fna12345

Si este nombre se utiliza para crear el archivo FNA12345 y todavía existe este archivo, el siguiente nombre devuelto en una llamada el mismo proceso o subproceso con el mismo base para template es:

fnb12345

Si no existe FNA12345, el siguiente nombre devuelto está de nuevo:

fna12345

_mktemp_s pueden crear un máximo de 26 nombres de archivo únicos para cualquier combinación de valores de base y de la plantilla.Por consiguiente, FNZ12345 es el nombre de archivo único pasado _mktemp_s puede crear por los valores de base y de template utilizados en este ejemplo.

En C++, mediante estas funciones es simplificado con sobrecargas de plantilla; las sobrecargas pueden deducir la longitud de búfer automáticamente (que elimina la necesidad de especificar un argumento de tamaño) y automáticamente pueden reemplazar anterior, funciones de no con sus más recientes, seguros homólogos.Para obtener más información, vea Sobrecargas de plantilla de seguridad.

Requisitos

rutina

Encabezado necesario

_mktemp_s

<io.h>

_wmktemp_s

<io.h> o <wchar.h>

Para obtener más información de compatibilidad, vea compatibilidad en la Introducción.

Ejemplo

// crt_mktemp_s.cpp
/* The program uses _mktemp to create
 * five unique filenames. It opens each filename
 * to ensure that the next name is unique.
 */

#include <io.h>
#include <string.h>
#include <stdio.h>

char *fnTemplate = "fnXXXXXX";
char names[5][9];

int main()
{
   int i, err, sizeInChars;
   FILE *fp;

   for( i = 0; i < 5; i++ )
   {
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );
      /* Get the size of the string and add one for the null terminator.*/
      sizeInChars = strnlen(names[i], 9) + 1;
      /* Attempt to find a unique filename: */
      err = _mktemp_s( names[i], sizeInChars );
      if( err != 0 )
         printf( "Problem creating the template" );
      else
      {
         if( fopen_s( &fp, names[i], "w" ) == 0 )
            printf( "Unique filename is %s\n", names[i] );
         else
            printf( "Cannot open %s\n", names[i] );
         fclose( fp );
      }
   }

   return 0;
}

Resultados del ejemplo

Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188

Equivalente en .NET Framework

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

Vea también

Referencia

El control de archivo

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile_s