Was ist die C ++ - Standardbibliothek für mkstemp?

8

Ich übertrage ein Programm, das temporäre Dateien von POSIX FILE zu C ++ Standardbibliothek Iostreams verwendet. Was ist die richtige Alternative zu mkstemp?

    
vy32 15.10.2011, 15:56
quelle

3 Antworten

3

Es gibt keine portable C ++ Möglichkeit, dies zu tun. Sie müssen eine Datei erstellen (was automatisch geschieht, wenn Sie eine Datei zum Schreiben mit ofstream öffnen) und dann remove erneut, wenn Sie mit der Datei fertig sind (mit der C-Bibliotheksfunktion remove). Sie können jedoch tmpnam verwenden, um einen Namen für die Datei zu generieren:

%Vor%     
Christian Rau 15.10.2011, 16:07
quelle
5

Es gibt keine. Beachten Sie, dass mkstemp weder Teil von C (mindestens C99) noch von C ++ - Standard ist - es ist ein POSIX-Zusatz. C ++ hat nur tmpfile und tmpnam im C-Bibliotheksteil.

Boost.IOStreams bietet jedoch eine file_descriptor Geräteklasse, die zum Erstellen eines Streams verwendet werden kann, der mit mkstemp arbeitet.

Wenn ich mich richtig erinnere, sollte es so aussehen:

%Vor%     
Cat Plus Plus 15.10.2011 16:04
quelle
3

Wenn Sie eine portable C ++ - Lösung wünschen, sollten Sie im boost :: Dateisystem unique_path verwenden :

  

Die Funktion unique_path generiert einen Pfadnamen, der zum Erstellen geeignet ist   temporäre Dateien, einschließlich Verzeichnisse. Der Name basiert auf einem Modell   Das Zeichen "Prozentzeichen" wird verwendet, um die Ersetzung durch "a" anzugeben   zufällige hexadezimale Ziffer. [Anmerkung: Je mehr Bits der Zufälligkeit in der   generierter Pfadname, desto geringer ist die Wahrscheinlichkeit einer vorherigen Existenz oder eines früheren Seins   erraten. Jede hexadezimale Ersatzziffer im Modell addiert vier   Bits der Zufälligkeit. Das Standardmodell stellt somit 64 Bits zur Verfügung   Zufälligkeit. Dies ist für die meisten Anwendungen ausreichend.

    
anno 15.10.2011 17:23
quelle

Tags und Links