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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top