tmpnam_s, _wtmpnam_s

Générez les noms que vous pouvez utiliser pour créer des fichiers temporaires.Ce sont des versions de tmpnam et _wtmpnam avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du CRT.

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

  • [out] str
    Pointeur qui contiendra le nom généré.

  • [in] sizeInChars
    La taille de la mémoire tampon de caractères.

Valeur de retour

Ces deux fonctions retournent 0 si l'opération a réussi ou un numéro d'erreur en cas de échec.

conditions d'erreur

str

sizeInChars

Valeur de retour

contenu de str

NULL

quels

EINVAL

non modifié

pas NULL (pointe vers une mémoire non valide)

trop court

ERANGE

non modifié

si str est NULL, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, ces errno défini par fonctions à EINVAL et à EINVALde retour.

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 de travail actuel.Remarque que lorsqu'un nom de fichier est ajouté au début par une barre oblique inverse et aucune information de chemin d'accès, telle que \ fname21, cela indique que le nom est valide pour le répertoire de travail actuel.

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, défini dans STDIO.H.si str est NULL, alors tmpnam_s laisse le résultat dans un tampon statique interne.Donc tous les appels suivants destroy cette valeur.Le nom généré par tmpnam_s se compose d'un nom de fichier programme-généré et, après le premier appel à tmpnam_s, d'une extension de fichier des numéros séquentiels dans la base 32 (.1-.1vvvvvu, lorsque TMP_MAX_S dans STDIO.H est INT_MAX).

tmpnam_s gère automatiquement les arguments de chaîne de caractères multioctets comme approprié, l'identification des séquences de caractères multioctets d'après la page de codes OEM obtenue du système d'exploitation._wtmpnam_s est une version à caractère élargi d' tmpnam_s; l'argument et que la valeur de retour d' _wtmpnam_s sont des chaînes à caractères larges._wtmpnam_s et tmpnam_s se comportent de la même façon qu'il _wtmpnam_s ne gère pas les chaînes de caractères multioctets.

En C++, à l'aide de ces fonctions est simplifié par des surcharges de modèle ; les surcharges peuvent également déduire la longueur de la mémoire tampon automatiquement, en éliminant le besoin de spécifier un argument de taille.Pour plus d'informations, consultez Surcharges sécurisées de modèle.

mappages de routines de texte générique

routine de TCHAR.H

_MBCS & de _UNICODE non défini

_MBCS défini

_UNICODE défini

_ttmpnam_s

tmpnam_s

tmpnam_s

_wtmpnam_s

Configuration requise

routine

en-tête requis

tmpnam_s

<stdio.h>

_wtmpnam_s

<stdio.h> ou <wchar.h>

Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.

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 );
      }
   }  
}

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.

Voir aussi

Référence

E/S de flux

_getmbcp

malloc

_setmbcp

tmpfile_s