Condividi tramite


tmpnam_s, _wtmpnam_s

Genera i nomi che è possibile usare per creare file temporanei. Queste funzioni sono versioni di e _wtmpnamcon 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.

Vedi anche

I/O di flusso
_getmbcp
malloc
_setmbcp
tmpfile_s