tmpnam_s
, _wtmpnam_s
Genere nombres que se puedan usar para crear archivos temporales. Estas funciones son versiones de tmpnam
y _wtmpnam
con mejoras de seguridad, como se describe en Características de seguridad de CRT.
Sintaxis
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
str
[out] Puntero que contiene el nombre generado.
sizeInChars
[in] Tamaño del búfer en caracteres.
Valor devuelto
Ambas funciones devuelven 0 si se realizan correctamente o un número de error en caso contrario.
Condiciones del error
str |
sizeInChars |
Valor devuelto | Contenido de str |
---|---|---|---|
NULL |
cualquiera | EINVAL |
no modificado |
no NULL (apunta a la memoria válida) |
demasiado corto | ERANGE |
no modificado |
Si str
es NULL
, se invoca el controlador de parámetros no válidos, tal y 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 temporal designado de Windows devuelto por GetTempPathW
. Cuando se antepone un nombre de archivo con una barra diagonal inversa y no hay información de ruta de acceso, como \fname21
, indica que el nombre es válido para el directorio de trabajo actual.
En el caso de 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
, definida en STDIO.H. Si str
es NULL
, tmpnam_s
deja el resultado en un búfer estático interno. Por lo tanto, las siguientes llamadas destruyen este valor. El nombre generado por consta de un nombre de archivo generado por tmpnam_s
programa y, después de la primera llamada a tmpnam_s
, una extensión de archivo de números secuenciales en base 32 (.1-.1vvvu, cuando TMP_MAX_S
se encuentra en STDIO. H es INT_MAX
).
tmpnam_s
controla automáticamente argumentos de cadena de caracteres multibyte como sea necesario, reconociendo las secuencias de caracteres multibyte en función de 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 de manera idéntica, 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, consulte Sobrecargas de plantilla seguras.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Asignaciones de rutinas 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
Routine | Encabezado necesario |
---|---|
tmpnam_s |
<stdio.h> |
_wtmpnam_s |
<stdio.h> o <wchar.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
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 );
}
}
}
C:\Users\LocalUser\AppData\Local\Temp\u19q8.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.1 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.2 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.3 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.4 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.5 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.6 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.7 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.8 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.9 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.a is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.b is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.c is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.d is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\u19q8.e is safe to use as a temporary file.