Share via


_mktemp, _wmktemp

Crea un nombre único.Versiones más seguras de estas funciones están disponibles; vea _mktemp_s, _wmktemp_s.

char *_mktemp(
   char *template 
);
wchar_t *_wmktemp(
   wchar_t *template 
);
template <size_t size>
char *_mktemp(
   char (&template)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
   wchar_t (&template)[size]
); // C++ only

Parámetros

  • template
    perfil de nombre.

Valor devuelto

Cada una de estas funciones devuelve un puntero a la plantilla modificada.La función devuelve NULL si template se forma mal o no más de nombres únicos se pueden crear de plantilla especificada.

Comentarios

la función de _mktemp crea un nombre de archivo único modificando el argumento de template ._mktemp 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 es una versión con caracteres anchos de _mktemp; el argumento y el valor devuelto de _wmktemp son cadenas de caracteres._wmktemp y _mktemp se comportan exactamente igual de otra forma, salvo que _wmktemp 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

_mktemp

_mktemp

_wmktemp

El argumento de template tiene el formato base, 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.Cada carácter marcador en template debe ser mayúscula X._mktemp conserva base y reemplaza el primer X que se arrastra por un carácter alfabético._mktemp 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 modifica template.En cada llamada subsiguiente del mismo proceso o subproceso con el mismo argumento de template , las comprobaciones de _mktemp los nombres de archivo que coinciden con los nombres devueltos por _mktemp en llamadas anteriores.Si ningún archivo existe para un nombre especificado, _mktemp devuelve ese nombre.Si los archivos existen para todos los nombres previamente devueltos, _mktemp 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 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 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 puede crear por los valores de base y de template utilizados en este ejemplo.

en el error, se establece errno .Si template tiene un formato no válido (por ejemplo, menos de 6 X), errno se establece en EINVAL.Si _mktemp no puede crear un nombre único porque existen los 26 nombres de archivo posibles ya, _mktemp establece la plantilla en una cadena vacía y devuelve EEXIST.

En C++, estas funciones tienen sobrecargas de plantilla que se invoque según el nuevo, garantiza que sus homólogos de estas funciones.Para obtener más información, vea Sobrecargas de plantilla de seguridad.

Requisitos

rutina

Encabezado necesario

_mktemp

<io.h>

_wmktemp

<io.h> o <wchar.h>

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

Ejemplo

// crt_mktemp.c
// compile with: /W3
/* The program uses _mktemp to create
 * unique filenames. It opens each filename
 * to ensure that the next name is unique.
 */

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

char *template = "fnXXXXXX";
char *result;
char names[27][9];

int main( void )
{
   int i;
   FILE *fp;

   for( i = 0; i < 27; i++ )
   {
      strcpy_s( names[i], sizeof( names[i] ), template );
      /* Attempt to find a unique filename: */
      result = _mktemp( names[i] );  // C4996
      // Note: _mktemp is deprecated; consider using _mktemp_s instead
      if( result == NULL )
      {
         printf( "Problem creating the template\n" );
         if (errno == EINVAL)
         {
             printf( "Bad parameter\n");
         }
         else if (errno == EEXIST)
         {
             printf( "Out of unique filenames\n"); 
         }
      }
      else
      {
         fopen_s( &fp, result, "w" );
         if( fp != NULL )
            printf( "Unique filename is %s\n", result );
         else
            printf( "Cannot open %s\n", result );
         fclose( fp );
      }
   }
}
  
  

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