Namespaces
Variants

std:: tmpfile

From cppreference.net
< cpp ‎ | io ‎ | c
Défini dans l'en-tête <cstdio>
std:: FILE * tmpfile ( ) ;

Crée et ouvre un fichier temporaire avec un nom de fichier unique généré automatiquement.

Le fichier est ouvert en mode binaire pour mise à jour (comme par std::fopen avec le mode d'accès "wb+" ). Au moins TMP_MAX fichiers peuvent être ouverts pendant la durée de vie d'un programme (cette limite peut être partagée avec std::tmpnam et peut être encore limitée par FOPEN_MAX ).

Si le programme ferme le fichier, par exemple en exécutant std::fclose , le fichier est automatiquement supprimé.

Si le programme se termine normalement (en appelant std::exit , en retournant de main , etc.), tous les fichiers qui ont été ouverts en appelant std::tmpfile sont également automatiquement supprimés.

Si le programme se termine anormalement, il est défini par l'implémentation si ces fichiers temporaires sont supprimés.

Table des matières

Paramètres

(aucun)

Valeur de retour

Le flux de fichier associé ou un pointeur nul si une erreur s'est produite.

Notes

Sur certaines implémentations (par exemple, Linux plus ancien), cette fonction crée, ouvre et supprime immédiatement le fichier du système de fichiers : tant qu'un descripteur de fichier ouvert vers un fichier supprimé est maintenu par un programme, le fichier existe, mais puisqu'il a été supprimé, son nom n'apparaît dans aucun répertoire, de sorte qu'aucun autre processus ne peut l'ouvrir. Une fois que le descripteur de fichier est fermé, ou une fois que le programme se termine (normalement ou anormalement), l'espace occupé par le fichier est récupéré par le système de fichiers. Les versions plus récentes de Linux (depuis 3.11 ou ultérieur, selon le système de fichiers) créent de tels fichiers temporaires invisibles en une seule étape, via un drapeau spécial dans l'appel système open() .

Sur certaines implémentations (par exemple Windows), des privilèges élevés sont requis car la fonction peut créer le fichier temporaire dans un répertoire système.

Exemple

#include <cstdio>
#include <cstdlib>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    std::cout << "TMP_MAX = " << TMP_MAX << '\n'
              << "FOPEN_MAX = " << FOPEN_MAX << '\n';
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Hello, world", tmpf);
    std::rewind(tmpf);
    char buf[6];
    std::fgets(buf, sizeof buf, tmpf);
    std::cout << buf << '\n';
    // Linux-specific method to display the tmpfile name
    std::cout << fs::read_symlink(
                     fs::path("/proc/self/fd") / std::to_string(fileno(tmpf))
                 ) << '\n';
}

Sortie possible :

TMP_MAX = 238328
FOPEN_MAX = 16
Hello
"/tmp/tmpfBlY1lI (deleted)"

Voir aussi

retourne un nom de fichier unique
(fonction)
retourne un répertoire adapté aux fichiers temporaires
(fonction)
Documentation C pour tmpfile