Linux eliminerà questo file dopo close(fd)?
Non automaticamente. Devi chiamare unlink
sul file manualmente. Puoi farlo immediatamente dopo aver chiamato mkstemp
se non hai bisogno di accedere al file per nome (ad esempio tramite il file system), verrà eliminato una volta chiuso il descrittore.
In alternativa, se devi passare il file a un'altra parte del codice (o processo) per nome, non chiamare unlink
ancora.
Ecco un flusso di lavoro di esempio:
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
chiude il FILE*
stream, ma anche il descrittore di file sottostante, quindi non abbiamo bisogno di chiamare esplicitamente close(fd)
.
Intestazioni necessarie:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>