2008-10-01 5 views

Antwort

17

Verwenden Sie eine der Standardbibliothek "MKTemp" -Funktionen: MKTemp/MKStemp/MKStemps/MKDTemp.

Edit: plain mktemp kann unsicher sein - mkstemp ist bevorzugt.

+2

Diese geben ein bereits geöffnetes FILE-Handle zurück, das sich nicht mit den IO-Streams von C++ vermischt. Was ist, wenn Sie beispielsweise std :: wofstream verwenden müssen, um in diese neue Datei zu schreiben? – Andrey

-2

Sie sollten einfach überprüfen, ob die Datei, die Sie schreiben möchten, bereits existiert. Dies ist ein Sperrproblem. Dateien haben auch Besitzer, also wenn Sie es richtig machen, wird der falsche Prozess nicht in der Lage sein, darauf zu schreiben.

0

Mann tmpfile

Die tmpfile() -Funktion öffnet eine einzigartige temporäre Datei in binärer Lese/Schreib (w + b) Modus. Die Datei wird automatisch gelöscht, wenn es geschlossen oder das Programm terminates.ote

6

tmpnam(), oder irgendetwas, das Sie einen Namen gibt, ist anfällig sein werden Bedingungen zu fahren. Verwenden Sie etwas zu diesem Zweck entwickelt, die einen Griff, wie tmpfile zurück():

#include <stdio.h> 

    FILE *tmpfile(void); 
0

mktemp funktionieren sollte oder sonst einer der zahlreichen verfügbaren Bibliotheken erhalten, um eine UUID zu generieren.

0

Die tmpnam()-Funktion in der C-Standardbibliothek wurde entwickelt, um genau dieses Problem zu lösen. Es gibt auch tmpfile(), das ein geöffnetes Dateihandle zurückgibt (und es automatisch löscht, wenn Sie es schließen).

+0

Verwenden Sie nicht tmpnam(). Von der man-Seite: "Verwenden Sie nie diese Funktion. Verwenden Sie stattdessen mkstemp (3) oder tmpfile (3)." – twk

+0

Hoppla. Ich habe nicht auf den "auf Linux" -Teil der Frage geachtet. mkstemp() ist wahrscheinlich die richtige Lösung, wenn Sie keine Portabilität benötigen. –

Verwandte Themen