Come posso creare un file temporaneo per scrivere in C ++ su una piattaforma Linux?
-
03-07-2019 - |
Domanda
In C ++, su Linux, come posso scrivere una funzione per restituire un nome file temporaneo che posso quindi aprire per scrivere?
Il nome file deve essere il più unico possibile, in modo che un altro processo che utilizza la stessa funzione non ottenga lo stesso nome.
Soluzione
Utilizza una delle librerie standard " mktemp " funzioni: mktemp / mkstemp / mkstemps / mkdtemp.
Modifica: mktemp semplice può essere insicuro - mkstemp è preferito.
Altri suggerimenti
tmpnam () o qualsiasi cosa ti dia un nome sarà vulnerabile alle condizioni di gara. Utilizzare qualcosa progettato per questo scopo che restituisce un handle, come tmpfile ():
#include <stdio.h>
FILE *tmpfile(void);
Il manuale GNU libc discute le varie opzioni disponibili e le loro avvertenze:
http://www.gnu.org/s /libc/manual/html_node/Temporary-Files.html
Per farla breve, solo mkstemp () o tmpfile () dovrebbero essere usati, come altri hanno già detto.
man tmpfile
La funzione tmpfile () apre un file temporaneo univoco in binario modalità lettura / scrittura (w + b). Il file verrà automaticamente cancellato quando è chiuso o il programma termina.ote
mktemp dovrebbe funzionare oppure ottenere una delle tante librerie disponibili per generare un UUID.
La funzione tmpnam () nella libreria standard C è progettato per risolvere proprio questo problema. C'è anche tmpfile (), che restituisce un handle di file aperto (e lo elimina automaticamente quando lo chiudi).
Dovresti semplicemente verificare se il file che stai tentando di scrivere esiste già. Questo è un problema di blocco. I file hanno anche dei proprietari, quindi se lo fai nel modo giusto il processo sbagliato non sarà in grado di scrivergli.