mkstemp, mkostemp, mkstemps, mkostemps - Créer un fichier temporaire
unique
Bibliothèque C standard (
libc,
-lc)
#include <stdlib.h>
int mkstemp(char *template);
int mkostemp(char *template, int flags);
int mkstemps(char *template, int suffixlen);
int mkostemps(char *template, int suffixlen, int flags);
mkstemp() :
_XOPEN_SOURCE >= 500
|| /* glibc >= 2.12: */ _POSIX_C_SOURCE >= 200809L
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
mkostemp():
_GNU_SOURCE
mkstemps():
/* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
mkostemps():
_GNU_SOURCE
La fonction
mkstemp() engendre un nom de fichier temporaire unique,
à partir du motif
template, crée et ouvre le fichier, et
renvoie un descripteur de fichier ouvert pour ce fichier.
Les 6 derniers caractères de
template doivent être XXXXXX,
et ils seront remplacés par une chaîne rendant le nom de fichier
unique. Comme il sera modifié,
template ne doit pas être
une chaîne constante, mais un tableau de caractères.
Le fichier est créé en mode 0600, c'est-à-dire en lecture
et écriture pour le propriétaire seulement. Le descripteur de
fichier renvoyé fournit les accès en lecture et en
écriture sur le fichier. Le fichier est ouvert avec l'attribut
O_EXCL de
open(2), garantissant que l'appelant soit le processus
qui a créé le fichier.
La fonction
mkostemp() agit comme
mkstemp(), à la
différence que les bits suivants — avec la même
signification que pour
open(2) — peuvent être
définis dans
flags :
O_APPEND,
O_CLOEXEC et
O_SYNC. Remarquez qu’en créant le fichier,
mkostemp() contient les valeurs
O_RDWR,
O_CREAT et
O_EXCL dans l’argument
flags donné à
open(2) ; inclure ces valeurs dans l’argument
flags donné à
mkostemp() n’est pas
nécessaire et produit des erreurs sur certains systèmes.
La fonction
mkstemps() agit comme
mkstemp() sauf que la
chaîne dans
template contient un suffixe de
suffixlen
caractères. Ainsi,
template est de la forme
préfixeXXXXXXsuffixe et la chaîne XXXXXX est
modifiée comme dans
mkstemp().
La fonction
mkostemps() est à
mkstemps() ce que
mkostemp() est à
mkstemp().
Si elles réussissent, ces fonctions renvoient le descripteur du fichier
temporaire créé ou
-1 si elles échouent, auquel
cas
errno contient le code d'erreur.
- EEXIST
- Impossible de créer un nom de fichier temporaire
unique. Le contenu template est alors imprévisible.
- EINVAL
- Pour mkstemp() et mkostemp() : les six
derniers caractères de template ne sont pas XXXXXX ;
template n'est pas modifié.
- Pour mkstemps() et mkostemps() :
template a une longueur inférieure à
(6 + suffixlen), ou les six derniers
caractères avant le suffixe ne sont pas XXXXXX.
Ces fonctions peuvent également échouer avec une des erreurs
décrites pour
open(2).
mkostemp() est disponible depuis la glibc 2.7.
mkstemps()
et
mkostemps() sont disponibles depuis la glibc 2.11.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
mkstemp(), mkostemp(), mkstemps(),
mkostemps() |
Sécurité des threads |
MT-Safe |
mkstemp() : 4.3BSD, POSIX.1-2001.
mkstemps() : non standard, mais existe sur plusieurs autres
systèmes.
mkostemp() et
mkostemps() sont des extensions de la glibc.
Dans la version 2.06 de la glibc et auparavant, le fichier était
créé en mode 0666, c'est-à-dire en lecture et
écriture pour tous les utilisateurs. Cet ancien comportement est un
trou de sécurité potentiel, surtout depuis que les autres
dérivés UNIX utilisent le mode 0600, et quelqu'un risque
d'oublier ce détail en effectuant un portage de programme. POSIX.1-2008
ajoute l'obligation de créer ce fichier en mode 0600.
Plus généralement, la spécification POSIX de
mkstemp() ne dit rien des modes des fichiers, ainsi les applications
doivent s'assurer que la valeur du masque de mode de création de
fichiers (consultez
umask(2)) est correcte avant d'appeler
mkstemp() (et
mkostemp()).
mkdtemp(3),
mktemp(3),
tempnam(3),
tmpfile(3),
tmpnam(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]> et David Prévot <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]