tmpfile, tmpfile_s
|
Défini dans l'en-tête
<stdio.h>
|
||
|
FILE
*
tmpfile
(
void
)
;
|
(1) | |
|
errno_t tmpfile_s
(
FILE
*
restrict
*
restrict
streamptr
)
;
|
(2) | (depuis C11) |
-
Comme pour toutes les fonctions à vérification de limites,
tmpfile_sn'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
Valeur de retour
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
|
(C11)
|
retourne un nom de fichier unique
(fonction) |
|
Documentation C++
pour
tmpfile
|
|