tmpnam

Autres langues

Langue: fr

Version: 15 novembre 2003 (mandriva - 01/05/08)

Section: 3 (Bibliothèques de fonctions)

NOM

tmpnam, tmpnam_r - Créer un nom de fichier temporaire

SYNOPSIS

 #include <stdio.h>
 
 char *tmpnam (char *s);
 

DESCRIPTION

La fonction tmpnam() renvoie un pointeur sur une chaîne qui représente un nom de fichier valide, qui n'existait pas il y a quelques instants. Ainsi, un programmeur naïf peut croire qu'il s'agit d'un nom correct pour créer un fichier temporaire. Si l'argument s est NULL, ce nom est stocké dans un tampon interne qui pourra être écrasé lors du prochain appel à tmpnam(). Si s est non NULL, le nom y est copié (le tampon doit faire au moins L_tmpnam octets ) et la valeur de s est renvoyée si la fonction réussit.

Le nom de fichier qui est créé est préfixé par P_tmpdir. (Les constantes L_tmpnam et P_tmpdir sont définies dans <stdio.h> comme TMP_MAX mentionné plus bas).

VALEUR RENVOYÉE

La fonction tmpnam() renvoie un pointeur sur un nom de fichier temporaire unique, ou NULL si l'unicité n'a pas pu être assurée.

ERREURS

Aucune erreur n'est définie.

CONFORMITÉ

SVr4, BSD 4.3, C89, C99, POSIX.1-2001.

NOTES

La fonction tmpnam() engendre une nouvelle chaîne à chaque appel, jusqu'à TMP_MAX fois. Si on l'invoque plus de TMP_MAX fois, le comportement dépend de l'implémentation.

Bien que tempnam(3) génère des noms qui soient dificiles à deviner, il est néanmoins possible qu'entre le moment où tempnam(3) renvoie le nom du chemin et le moment où le programme l'ouvre, un autre programme a pu créer ce même nom de chemin avec open(2), ou l'avoir créer sous forme de lien symbolique. Cela peut conduire à des trous de sécurité. Pour éviter de telles possibilités, utilisez l'attribut O_EXCL de open(2) pour ouvrir le nom du chemin. Ou encore mieux, utilisez mkstemp(3) ou tmpfile(3).

Les applications portables qui utilisent les threads ne peuvent pas appeler tmpnam() avec un paramètre NULL si _POSIX_THREAD_SAFE_FUNCTIONS ou _POSIX_THREADS sont définies.

Un brouillon POSIX proposait l'utilisation d'une fonction tmpnam_r() définie par

 char *tmpnam_r(char *s) {
     return s ? tmpnam(s) : NULL;
 }
 

apparemment comme une précaution pour ne pas utiliser NULL. Quelques systèmes l'implémentent. Pour obtenir le prototype glibc de cette fonction, définir _SVID_SOURCE ou _BSD_SOURCE avant d'inclure <stdio.h>.

BOGUES

N'utilisez jamais cette routine. Utilisez mkstemp(3) ou tmpfile(3) à la place.

VOIR AUSSI

mkstemp(3), mktemp(3), tempnam(3), tmpfile(3)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 2 décembre 1996 et révisée le 22 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 tmpnam ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.