Namespaces
Variants

tmpfile, tmpfile_s

From cppreference.net
< c ‎ | io
Défini dans l'en-tête <stdio.h>
FILE * tmpfile ( void ) ;
(1)
errno_t tmpfile_s ( FILE * restrict * restrict streamptr ) ;
(2) (depuis C11)
1) Crée et ouvre un fichier temporaire. Le fichier est ouvert en mode binaire pour mise à jour (comme par fopen avec le mode "wb+" ). Le nom du fichier est garanti d'être unique dans le système de fichiers. Au moins TMP_MAX fichiers peuvent être ouverts pendant la durée de vie d'un programme (cette limite peut être partagée avec tmpnam et peut être encore limitée par FOPEN_MAX ).
2) Identique à (1) , sauf qu'au moins TMP_MAX_S fichiers peuvent être ouverts (la limite peut être partagée avec tmpnam_s ), et si streamptr est un pointeur nul, la fonction gestionnaire de contraintes actuellement installée est appelée.
Comme pour toutes les fonctions à vérification de limites, tmpfile_s n'est garantie 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> .

Le fichier temporaire créé par cette fonction est fermé et supprimé lorsque le programme se termine normalement. S'il est supprimé lors d'une terminaison anormale est défini par l'implémentation.

Table des matières

Paramètres

1) (aucun)
2) pointeur vers un pointeur qui sera mis à jour par cet appel de fonction

Valeur de retour

1) Pointeur vers le flux de fichier associé au fichier ou pointeur nul si une erreur s'est produite.
2) Zéro si le fichier a été créé et ouvert avec succès, non-zéro si le fichier n'a pas été créé ou ouvert ou si streamptr était un pointeur nul. De plus, un pointeur vers le flux de fichier associé est stocké dans * streamptr en cas de succès, et une valeur de pointeur nul est stockée dans * streamptr en cas d'erreur.

Notes

Sur certaines implémentations (par exemple, Linux 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

#define _POSIX_C_SOURCE 200112L
#include <stdio.h>
#include <unistd.h>
int main(void)
{
    printf("TMP_MAX = %d, FOPEN_MAX = %d\n", TMP_MAX, FOPEN_MAX);
    FILE* tmpf = tmpfile();
    fputs("Hello, world", tmpf);
    rewind(tmpf);
    char buf[6];
    fgets(buf, sizeof buf, tmpf);
    printf("got back from the file: '%s'\n", buf);
    // Linux-specific method to display the tmpfile name
    char fname[FILENAME_MAX], link[FILENAME_MAX] = {0};
    sprintf(fname, "/proc/self/fd/%d", fileno(tmpf));
    if (readlink(fname, link, sizeof link - 1) > 0)
        printf("File name: %s\n", link);
}

Sortie possible :

TMP_MAX = 238328, FOPEN_MAX = 16
got back from the file: 'Hello'
File name: /tmp/tmpfjptPe5 (deleted)

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.21.4.3 La fonction tmpfile (p: TBD)
  • K.3.5.1.1 La fonction tmpfile_s (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.21.4.3 La fonction tmpfile (p. 222)
  • K.3.5.1.1 La fonction tmpfile_s (p. 427)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.21.4.3 La fonction tmpfile (p: 303)
  • K.3.5.1.1 La fonction tmpfile_s (p: 586-587)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.19.4.3 La fonction tmpfile (p: 269)
  • Norme C89/C90 (ISO/CEI 9899:1990) :
  • 4.9.4.3 La fonction tmpfile

Voir aussi

retourne un nom de fichier unique
(fonction)
Documentation C++ pour tmpfile