_mktemp_s, _wmktemp_s
Restituisce un nome file univoco. Queste sono versioni di _mktemp, _wmktemp con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in 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
Parametri
template
Criterio per il nome file.sizeInChars
Dimensione del buffer di caratteri a byte singolo in _mktemp_s; caratteri wide in _wmktemp_s, incluso il carattere di terminazione null.
Valore restituito
Entrambe queste funzioni restituiscono zero in caso di esito positivo; un codice di errore in caso di fallimento.
Condizioni di errore
template |
sizeInChars |
valore restituito |
nuovo valore del modello |
---|---|---|---|
NULL |
any |
EINVAL |
NULL |
Formato non valido (vedere la sezione Remarks per il formato corretto) |
any |
EINVAL |
stringa vuota |
any |
<= numero di X |
EINVAL |
stringa vuota |
Se si verifica una qualsiasi delle condizioni di errore sopra riportate, viene invocato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, errno viene impostato a EINVAL e le funzioni restituiscono EINVAL.
Note
La funzione _mktemp_s crea un nome file univoco modificando l'argomento di template, in modo che dopo la chiamata, il puntatore template punti ad una stringa contenente il nuovo nome file. _mktemp_s gestisce automaticamente gli argomenti della stringa con caratteri multibyte in base alle proprie esigenze, riconoscere le sequenze di caratteri multibyte in base alla tabella codici multibyte attualmente in uso dal sistema in fase di esecuzione. _wmktemp_s è una versione a caratteri wide di _mktemp_s; l'argomento di _wmktemp_s è una stringa a caratteri wide. _wmktemp_s e _mktemp_s si comportano in modo identico in caso contrario, ma _wmktemp_s non gestisce le stringhe di caratteri multibyte.
Mapping di routine di testo generico
Routine Tchar.h |
_UNICODE e _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tmktemp_s |
_mktemp_s |
_mktemp_s |
_wmktemp_s |
L'argomento template presenta la forma baseXXXXXX, dove base è la parte del nuovo nome file specificata e ogni X è un segnaposto per un carattere fornito da _mktemp_s. Ogni carattere segnaposto in template deve essere una maiuscola. X. _mktemp_s mantiene base e sostituisce la prima X di trascinamento con un carattere alfabetico. _mktemp_s sostituisce le seguenti x finali con un valore pari a cinque cifre; questo valore è un numero univoco che identifica il processo chiamante, o programmi multithread, il thread chiamante.
Ogni chiamata con esito positivo a _mktemp_s modifica template. In ogni chiamata successiva dallo stesso processo o thread con lo stesso argomento template, controlli _mktemp_s per i nomi di file nomi di corrispondenza restituiti da _mktemp_s in chiamate precedenti. Se tale file non esiste per un nome specificato, restituisce _mktemp_s di da parte. Se i file disponibili per tutti i nomi in precedenza restituiti, _mktemp_s crea un nuovo nome sostituendo il carattere alfabetico che utilizza il nome in precedenza restituito con la lettera minuscola successivo disponibile, in ordine, "da" e "z". Ad esempio, se base se:
fn
e il valore di cinque cifre specificato da _mktemp_s è 12345, il nome restituito è:
fna12345
Se questo nome viene utilizzato per creare il file FNA12345 tale file esiste ancora, il nome successivo restituito di una chiamata dallo stesso processo o thread con lo stesso base per template è:
fnb12345
Se FNA12345 non esiste, il successivo nome restituito è di nuovo:
fna12345
_mktemp_s possibile creare un massimo di 26 nomi file univoci per qualsiasi combinazione specifica di valori del modello e di base. Pertanto, FNZ12345 è l'ultimo nome file univoco _mktemp_s può creare per i valori template e base utilizzati in questo esempio.
In C++ l'utilizzo 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) e possono sostituire automaticamente le funzioni precedenti e non sicure con le controparti più recenti e sicure. Per ulteriori informazioni, vedere Overload di modelli sicuri.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
_mktemp_s |
<io.h> |
_wmktemp_s |
<io.h> o <wchar.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.
Esempio
// 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;
}
Esempio di output
Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.