Partager via


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 _wtmpnamavec 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 \fname21exemple, 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.

Voir aussi

E/S de flux
_getmbcp
malloc
_setmbcp
tmpfile_s