2012-08-17 28 views
9

Ho visto alcuni post relativi alla mia domanda, ma nessuno che lo indirizzi completamente. Devo creare un file nella directory temporanea standard e dopo aver finito di scriverlo, spostarlo in una posizione diversa. L'idea è che il file sia considerato temporaneo mentre viene scaricato e permanente dopo il download.Come ottenere un nome di file temporaneo?

Sto tentando di farlo chiamando mkstemp o tmpfile, quindi rename dopo aver finito di scriverlo. Tuttavia, ho bisogno del percorso completo del file per chiamare rinominare, e apparentemente ottenere il nome del file da un descrittore di file (restituito da mkstemp) o FILE * (restituito da tmpfile) non è un processo banale. Può essere fatto, ma non è elegante.

C'è una chiamata di sistema che creerà un file temporaneo e mi fornirà il nome? Conosco lo mktemp e le chiamate correlate, ma non sono garantite come uniche o obsolete. O forse c'è un modo migliore per realizzare la creazione, la scrittura e lo spostamento di file temporanei.

risposta

10

Sembra che mkstemp sia effettivamente la strada da percorrere.

int fd; 
char name[] = "/tmp/fileXXXXXX"; 
fd = mkstemp(name); 
/* Check fd. */ 

Dopo questa chiamata è necessario un descrittore valido fd e il nome del file associato a name.

+0

Si è corretto, e ho bisogno di essere più approfondito quando leggo la documentazione. Chiamami OCD, ma ho usato le informazioni su [questo post] (http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu) per ottenere il cartella temporanea anziché semplicemente hard-coding "/ tmp"; – jorgander

+0

Se si sta creando un file in/tmp/e si prevede di spostare il file in una posizione specifica, dire "/ home//quindi ci vorrà molto tempo per cp o spostare e sarà ancora peggio se/tmp e/home/erano in aree di partizione diverse, quindi è meglio creare file in/home//fileXXXXX e rinominarlo in/home//file. – Viswesn

+0

Qual è il nome file finale? –

Problemi correlati