Linux supprimera-t-il ce fichier après la fermeture (fd) ?
Pas automatiquement. Vous devez appeler le unlink
sur le fichier manuellement. Vous pouvez le faire immédiatement après avoir appelé le mkstemp
si vous n'avez pas besoin d'accéder au fichier par son nom (c'est-à-dire via le système de fichiers) — il sera alors supprimé une fois le descripteur fermé.
Alternativement, si vous devez transmettre le fichier à une autre partie du code (ou processus) par son nom, n'appelez pas unlink
pour l'instant.
Voici un exemple de workflow :
char filename[] = "tempfile-XXXXXX";
int fd;
if ((fd = mkstemp(filename)) == -1) {
fprintf(stderr, "Failed with error %s\n", strerror(errno));
return -1;
}
unlink(filename);
FILE *fh = fdopen(fd, "w");
fprintf(fh, "It worked!\n");
fclose(fh);
fclose
ferme le FILE*
stream, mais aussi le descripteur de fichier sous-jacent, nous n'avons donc pas besoin d'appeler explicitement close(fd)
.
En-têtes nécessaires :
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>