tmpnam_s
, _wtmpnam_s
Génèrent des noms que vous pouvez utiliser pour créer des fichiers temporaires. Ces fonctions sont des versions et _wtmpnam
avec des améliorations detmpnam
sécurité, comme décrit dans les fonctionnalités de sécurité du CRT.
Syntaxe
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
Paramètres
str
[out] Pointeur qui contient le nom généré.
sizeInChars
[in] Taille de la mémoire tampon en caractères.
Valeur retournée
Ces deux fonctions retournent 0 en cas de réussite ou un numéro d’erreur en cas d’échec.
Conditions d’erreur
str |
sizeInChars |
Valeur retournée | Contenu de str |
---|---|---|---|
NULL |
n'importe laquelle | EINVAL |
non modifié |
non NULL (pointe vers une mémoire valide) |
trop court | ERANGE |
non modifié |
Si str
a la valeur NULL
, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions attribuent à errno
la valeur EINVAL
et retournent EINVAL
.
Notes
Chacune de ces fonctions retourne le nom d’un fichier qui n’existe pas actuellement. tmpnam_s
retourne un nom unique dans le répertoire temporaire Windows désigné retourné par GetTempPathW
. Lorsqu’un nom de fichier est précédé d’une barre oblique inverse et qu’aucune information de chemin d’accès, par \fname21
exemple, indique que le nom est valide pour le répertoire de travail actif.
Pour tmpnam_s
, vous pouvez stocker ce nom de fichier généré dans str
. La longueur maximale d’une chaîne retournée par tmpnam_s
est L_tmpnam_s
, qui est défini dans STDIO.H. Si str
a la valeur NULL
, tmpnam_s
maintient le résultat dans une mémoire tampon statique interne. Par conséquent, tous les appels suivants détruisent cette valeur. Le nom généré par se compose d’un nom de fichier généré par tmpnam_s
le programme et, après le premier appel à tmpnam_s
, une extension de fichier de nombres séquentiels dans la base 32 (.1-.1vvvvvu, quand TMP_MAX_S
dans STDIO. H est INT_MAX
).
tmpnam_s
gère automatiquement les arguments de chaîne de caractères multioctets comme il convient, en identifiant les séquences de caractères multioctets en fonction de la page de codes OEM obtenue du système d’exploitation. _wtmpnam_s
est une version à caractères larges de tmpnam_s
; l'argument et la valeur de retour de _wtmpnam_s
sont des chaînes à caractères larges. _wtmpnam_s
et tmpnam_s
se comportent de la même façon, sauf que _wtmpnam_s
cela ne gère pas les chaînes de caractères multioctets.
En C++, l’utilisation de ces fonctions est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire automatiquement la longueur de la mémoire tampon, ce qui évite d’avoir à spécifier un argument de taille. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Mappages de routines de texte générique
Routine TCHAR.H | _UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_ttmpnam_s |
tmpnam_s |
tmpnam_s |
_wtmpnam_s |
Spécifications
Routine | En-tête requis |
---|---|
tmpnam_s |
<stdio.h> |
_wtmpnam_s |
<stdio.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// 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.