tmpnam_s
, _wtmpnam_s
Genera i nomi che è possibile usare per creare file temporanei. Queste funzioni sono versioni di e _wtmpnam
con miglioramenti dellatmpnam
sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
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
Parametri
str
[out] Puntatore che contiene il nome generato.
sizeInChars
[in] Dimensione del buffer in caratteri.
Valore restituito
Entrambe queste funzioni restituiscono 0 in caso di esito positivo o un numero di errore in caso di esito negativo.
Condizioni di errore
str |
sizeInChars |
Valore restituito | Contenuto di str |
---|---|---|---|
NULL |
qualsiasi | EINVAL |
non modificato |
non NULL (punta alla memoria valida) |
troppo breve | ERANGE |
non modificato |
Se str
è NULL
, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno
su EINVAL
e restituiscono EINVAL
.
Osservazioni:
Ognuna di queste funzioni restituisce il nome di un file che non esiste attualmente. tmpnam_s
restituisce un nome univoco nella directory temporanea di Windows designata restituita da GetTempPathW
. Quando un nome file viene anteporto a una barra rovesciata e nessuna informazione sul percorso, ad esempio \fname21
, indica che il nome è valido per la directory di lavoro corrente.
Per tmpnam_s
, è possibile archiviare questo nome del file generato in str
. La lunghezza massima di una stringa restituita da tmpnam_s
è L_tmpnam_s
, definito in STDIO.H. Se str
è NULL
, tmpnam_s
lascia il risultato in un buffer interno statico. Le eventuali chiamate successive eliminano quindi questo valore. Il nome generato da è costituito da un nome di file generato dal tmpnam_s
programma e, dopo la prima chiamata a tmpnam_s
, un'estensione di file di numeri sequenziali in base 32 (.1-.1vvvvvu, quando TMP_MAX_S
in STDIO. H è INT_MAX
).
tmpnam_s
gestisce automaticamente gli argomenti stringa di caratteri multibyte in modo appropriato, riconoscendo le sequenze di caratteri multibyte in base alla tabella codici OEM ottenuta dal sistema operativo. _wtmpnam_s
è una versione a caratteri wide di tmpnam_s
. L'argomento e il valore restituito di _wtmpnam_s
sono stringhe a caratteri wide. _wtmpnam_s
e tmpnam_s
si comportano in modo identico, ad eccezione del fatto che _wtmpnam_s
non gestisce stringhe di caratteri multibyte.
In C++ l'uso di queste funzioni è semplificato dagli overload dei modelli. Gli overload possono dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento di dimensione. Per altre informazioni, vedere Proteggere gli overload dei modelli.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Mapping di routine di testo generico
Routine TCHAR.H | _UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_ttmpnam_s |
tmpnam_s |
tmpnam_s |
_wtmpnam_s |
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
tmpnam_s |
<stdio.h> |
_wtmpnam_s |
<stdio.h> o <wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// 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.