std:: tmpfile
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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 Update geöffnet (wie durch std::fopen mit Zugriffsmodus "wb+" ). Mindestens TMP_MAX Dateien können während der Lebensdauer eines Programms 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 Ausführung von std::fclose , wird die Datei automatisch gelöscht.
Wenn das Programm normal terminiert (durch Aufruf von
std::exit
, Rückkehr aus
main
, etc.), werden alle Dateien, die durch Aufruf von
std::tmpfile
geöffnet wurden, ebenfalls automatisch gelöscht.
Wenn das Programm abnormal beendet wird, ist implementierungsdefiniert, ob diese temporären Dateien gelöscht werden.
Inhaltsverzeichnis |
Parameter
(keine)
Rückgabewert
Der zugehörige Dateistream oder ein Nullzeiger, falls ein Fehler aufgetreten ist.
Hinweise
Auf einigen Implementierungen (z.B. älteren Linux-Versionen) erstellt diese Funktion tatsächlich eine Datei, öffnet sie und löscht sie sofort aus dem Dateisystem: Solange ein Programm einen offenen Dateideskriptor zu einer gelöschten Datei hält, existiert die Datei, aber da sie gelöscht wurde, erscheint ihr Name in keinem Verzeichnis, sodass kein anderer Prozess sie öffnen kann. Sobald der Dateideskriptor geschlossen wird oder das Programm beendet wird (normal oder abnormal), wird der von der Datei belegte Speicherplatz vom Dateisystem zurückgewonnen. 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()
Syscall.
Auf einigen Implementierungen (z.B. Windows) sind erhöhte Berechtigungen erforderlich, da die Funktion die temporäre Datei möglicherweise in einem Systemverzeichnis erstellt.
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)"
Siehe auch
|
gibt einen eindeutigen Dateinamen zurück
(Funktion) |
|
|
(C++17)
|
gibt ein Verzeichnis für temporäre Dateien zurück
(Funktion) |
|
C-Dokumentation
für
tmpfile
|
|