Namensräume
Varianten
Aktionen

std::tmpfile

Von cppreference.com
< cpp‎ | io‎ | c
 
 
 
C-Style I/O
Typen und Objekte
Funktionen
Datei-Zugriff
Direkte Ein-/Ausgabe
Unformatierte Ein-/Ausgabe
Formatierte Eingabe
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Operationen auf Dateien
tmpfile
 
Definiert in Header <cstdio>
std::FILE* tmpfile();

Erstellt und öffnet eine temporäre Datei mit einem eindeutigen, automatisch generierten Dateinamen.

Die Datei wird als Binärdatei zum Lesen und Schreiben geöffnet (wie mit std::fopen mit dem Zugriffsmodus "wb+"). Während der Lebensdauer eines Programms können mindestens TMP_MAX Dateien geöffnet werden (dieses Limit kann mit std::tmpnam geteilt werden und kann durch FOPEN_MAX weiter eingeschränkt sein).

Wenn das Programm die Datei schließt, z.B. durch Aufruf von std::fclose, wird die Datei automatisch gelöscht.

Wenn das Programm normal beendet wird (durch Aufruf von std::exit, Rückkehr aus main usw.), werden alle durch Aufruf von std::tmpfile geöffneten Dateien ebenfalls automatisch gelöscht.

Wenn das Programm abnormal beendet wird, ist es implementierungsabhängig, ob diese temporären Dateien gelöscht werden.

Inhalt

[bearbeiten] Parameter

(keine)

[bearbeiten] Rückgabewert

Der zugehörige Dateistream oder ein Nullzeiger, wenn ein Fehler aufgetreten ist.

[bearbeiten] Hinweise

Auf einigen Implementierungen (z.B. älteren Linux-Versionen) erstellt diese Funktion tatsächlich eine temporäre Datei, öffnet sie und löscht sie sofort aus dem Dateisystem: Solange ein offener Dateideskriptor zu einer gelöschten Datei von einem Programm gehalten wird, existiert die Datei, aber da sie gelöscht wurde, erscheint sie in keinem Verzeichnis, sodass kein anderes Prozess sie öffnen kann. Sobald der Dateideskriptor geschlossen wird oder das Programm beendet wird (normal oder abnormal), wird der von der Datei belegte Speicher vom Dateisystem wieder freigegeben. Neuere Linux-Versionen (seit 3.11 oder später, abhängig vom Dateisystem) erstellen solche unsichtbaren temporären Dateien in einem Schritt über ein spezielles Flag im open()-Systemaufruf.

Auf einigen Implementierungen (z.B. Windows) sind erhöhte Berechtigungen erforderlich, da die Funktion die temporäre Datei möglicherweise in einem Systemverzeichnis erstellt.

[bearbeiten] Beispiel

#include <cstdio>
#include <cstdlib>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
 
int main()
{
    std::cout << "TMP_MAX = " << TMP_MAX << '\n'
              << "FOPEN_MAX = " << FOPEN_MAX << '\n';
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Hello, world", tmpf);
    std::rewind(tmpf);
    char buf[6];
    std::fgets(buf, sizeof buf, tmpf);
    std::cout << buf << '\n';
 
    // Linux-specific method to display the tmpfile name
    std::cout << fs::read_symlink(
                     fs::path("/proc/self/fd") / std::to_string(fileno(tmpf))
                 ) << '\n';
}

Mögliche Ausgabe

TMP_MAX = 238328
FOPEN_MAX = 16
Hello
"/tmp/tmpfBlY1lI (deleted)"

[bearbeiten] Siehe auch

gibt einen eindeutigen Dateinamen zurück
(function) [bearbeiten]
gibt ein Verzeichnis zurück, das für temporäre Dateien geeignet ist
(Funktion) [bearbeiten]
C-Dokumentation für tmpfile