Namespaces
Variants

tmpnam, tmpnam_s

From cppreference.net
< c ‎ | io
Défini dans l'en-tête <stdio.h>
char * tmpnam ( char * filename ) ;
(1)
errno_t tmpnam_s ( char * filename_s, rsize_t maxsize ) ;
(2) (depuis C11)
#define TMP_MAX        /*unspecified*/
#define TMP_MAX_S      /*unspecified*/
(depuis C11)
#define L_tmpnam       /*unspecified*/
#define L_tmpnam_s     /*unspecified*/
(depuis C11)
1) Crée un nom de fichier unique valide (ne dépassant pas L_tmpnam en longueur) et le stocke dans la chaîne de caractères pointée par filename . La fonction est capable de générer jusqu'à TMP_MAX noms de fichiers uniques, mais certains ou tous peuvent être utilisés dans le système de fichiers et donc ne pas convenir comme valeurs de retour.
2) Identique à (1) , sauf que jusqu'à TMP_MAX_S noms peuvent être générés, ne dépassant pas L_tmpnam_s en longueur, et les erreurs suivantes sont détectées à l'exécution et appellent la fonction gestionnaire de contraintes actuellement installée :
  • filename_s est un pointeur nul
  • maxsize est supérieur à RSIZE_MAX
  • maxsize est inférieur à la chaîne de nom de fichier générée
Comme pour toutes les fonctions à vérification de limites, tmpnam_s n'est garanti d'être disponible que si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ à la constante entière 1 avant d'inclure <stdio.h> .

tmpnam et tmpnam_s modifient un état statique (qui peut être partagé entre ces fonctions) et ne sont pas tenus d'être thread-safe.

Table des matières

Paramètres

filename - pointeur vers le tableau de caractères capable de contenir au moins L_tmpnam octets, à utiliser comme tampon de résultat. Si un pointeur nul est passé, un pointeur vers un tampon statique interne est retourné.
filename_s - pointeur vers le tableau de caractères capable de contenir au moins L_tmpnam_s octets, à utiliser comme tampon de résultat.
maxsize - nombre maximum de caractères que la fonction est autorisée à écrire (généralement la taille du tableau filename_s ).

Valeur de retour

1) filename si filename n'était pas un pointeur nul. Sinon, un pointeur vers un tampon statique interne est retourné. Si aucun nom de fichier approprié ne peut être généré, un pointeur nul est retourné.
2) Retourne zéro et écrit le nom du fichier dans filename_s en cas de succès. En cas d'erreur, retourne une valeur non nulle et écrit le caractère nul dans filename_s [ 0 ] (uniquement si filename_s n'est pas nul et maxsize n'est pas zéro et n'est pas supérieur à RSIZE_MAX ).

Notes

Bien que les noms générés par tmpnam soient difficiles à deviner, il est possible qu'un fichier portant ce nom soit créé par un autre processus entre le moment où tmpnam retourne et le moment où ce programme tente d'utiliser le nom retourné pour créer un fichier. La fonction standard tmpfile et la fonction POSIX mkstemp ne présentent pas ce problème (créer un répertoire unique en utilisant uniquement la bibliothèque standard C nécessite toujours l'utilisation de tmpnam ).

Les systèmes POSIX définissent également la fonction de nom similaire tempnam , qui offre le choix d'un répertoire (qui utilise par défaut la macro optionnellement définie P_tmpdir ).

Exemple

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    // Note, the compiler/linker may issue a security warning, e.g. GCC:
    // "warning: the use of `tmpnam' is dangerous, better use `mkstemp'"
    char* name1 = tmpnam(NULL);
    printf("temporary file name: %s\n", name1);
    char name2[L_tmpnam];
    if (tmpnam(name2))
        printf("temporary file name: %s\n", name2);
    // POSIX offers mkstemp. The following declaration might be
    // necessary as mkstemp is absent in the standard C <stdlib.h>.
    int mkstemp(char*);
    char name3[] = "/tmp/fileXXXXXX"; // at least six 'X' required ^_^
    int file_descriptor = mkstemp(name3);
    if (file_descriptor != -1)
        printf("temporary file name: %s\n", name3);
    else
        perror("mkstemp");
}

Sortie possible :

temporary file name: /tmp/file90dLlR
temporary file name: /tmp/fileY9LWAg
temporary file name: /tmp/filexgv8PF

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.21.4.4 La fonction tmpnam (p: TBD)
  • K.3.5.1.2 La fonction tmpnam_s (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.21.4.4 La fonction tmpnam (p. 222)
  • K.3.5.1.2 La fonction tmpnam_s (p. 427-428)
  • Norme C11 (ISO/CEI 9899:2011):
  • 7.21.4.4 La fonction tmpnam (p: 303-304)
  • K.3.5.1.2 La fonction tmpnam_s (p: 587-588)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.19.4.4 La fonction tmpnam (p: 269-270)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.9.4.4 La fonction tmpnam

Voir aussi

retourne un pointeur vers un fichier temporaire
(fonction)