tmpnam, tmpnam_s
|
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) | |
-
- 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_sn'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
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
|
(C11)
|
retourne un pointeur vers un fichier temporaire
(fonction) |
|
Documentation C++
pour
tmpnam
|
|