¿Linux eliminará este archivo después de cerrar (fd)?
No automáticamente. Tienes que llamar al unlink
en el archivo manualmente. Puedes hacer esto inmediatamente después de llamar al mkstemp
si no necesita acceder al archivo por su nombre (es decir, a través del sistema de archivos), se eliminará una vez que se cierre el descriptor.
Alternativamente, si necesita pasar el archivo a otra parte del código (o proceso) por nombre, no llame a unlink
todavía.
Aquí hay un flujo de trabajo de ejemplo:
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
cierra el FILE*
stream, sino también el descriptor de archivo subyacente, por lo que no necesitamos llamar explícitamente a close(fd)
.
Encabezados necesarios:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>