Namensräume
Varianten
Aktionen

tmpfile, tmpfile_s

Von cppreference.com
< c‎ | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
        
Funktionen
Datei-Zugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Operationen auf Dateien
tmpfiletmpfile_s
(C11)
 
Definiert in Header <stdio.h>
FILE* tmpfile( void );
(1)
errno_t tmpfile_s( FILE* restrict* restrict streamptr );
(2) (seit C11)
1) Erstellt und öffnet eine temporäre Datei. Die Datei wird als Binärdatei zum Aktualisieren geöffnet (als ob mit fopen im Modus "wb+"). Der Dateiname der Datei ist garantiert eindeutig innerhalb des Dateisystems. Mindestens TMP_MAX Dateien dürfen während der Lebensdauer eines Programms geöffnet werden (dieses Limit kann mit tmpnam geteilt werden und kann durch FOPEN_MAX weiter eingeschränkt sein).
2) Wie (1), außer dass mindestens TMP_MAX_S Dateien geöffnet werden dürfen (das Limit kann mit tmpnam_s geteilt werden), und wenn streamptr ein Nullzeiger ist, wird die aktuell installierte Constraint-Handler-Funktion aufgerufen.
Wie bei allen grenzgeprüften Funktionen ist tmpfile_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von <stdio.h> auf die Ganzzahlkonstante 1 setzt.

Die von dieser Funktion erstellte temporäre Datei wird beim normalen Beenden des Programms geschlossen und gelöscht. Ob sie bei abnormaler Beendigung gelöscht wird, ist implementierungsabhängig.

Inhalt

[bearbeiten] Parameter

1) (keine)
2) Zeiger auf einen Zeiger, der von diesem Funktionsaufruf aktualisiert wird

[bearbeiten] Rückgabewert

1) Zeiger auf den mit der Datei verbundenen Dateistream oder Nullzeiger, wenn ein Fehler aufgetreten ist.
2) Null, wenn die Datei erfolgreich erstellt und geöffnet wurde, ungleich Null, wenn die Datei nicht erstellt oder geöffnet wurde oder wenn streamptr ein Nullzeiger war. Zusätzlich wird der Zeiger auf den zugehörigen Dateistream bei Erfolg in *streamptr und bei einem Fehler ein Nullzeigerwert in *streamptr gespeichert.

[bearbeiten] Anmerkungen

Auf einigen Implementierungen (z. B. ältere 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 für eine gelöschte Datei von einem Programm gehalten wird, existiert die Datei, aber da sie gelöscht wurde, erscheint ihr Name nicht in einem Verzeichnis, so dass 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 Speicherplatz vom Dateisystem freigegeben. Neuere Linux-Versionen (seit 3.11 oder später, je nach 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

#define _POSIX_C_SOURCE 200112L
#include <stdio.h>
#include <unistd.h>
 
int main(void)
{
    printf("TMP_MAX = %d, FOPEN_MAX = %d\n", TMP_MAX, FOPEN_MAX);
    FILE* tmpf = tmpfile();
    fputs("Hello, world", tmpf);
    rewind(tmpf);
    char buf[6];
    fgets(buf, sizeof buf, tmpf);
    printf("got back from the file: '%s'\n", buf);
 
    // Linux-specific method to display the tmpfile name
    char fname[FILENAME_MAX], link[FILENAME_MAX] = {0};
    sprintf(fname, "/proc/self/fd/%d", fileno(tmpf));
    if (readlink(fname, link, sizeof link - 1) > 0)
        printf("File name: %s\n", link);
}

Mögliche Ausgabe

TMP_MAX = 238328, FOPEN_MAX = 16
got back from the file: 'Hello'
File name: /tmp/tmpfjptPe5 (deleted)

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.21.4.3 Die Funktion tmpfile (p: TBD)
  • K.3.5.1.1 Die Funktion tmpfile_s (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.21.4.3 Die Funktion tmpfile (p: 222)
  • K.3.5.1.1 Die Funktion tmpfile_s (p: 427)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.21.4.3 Die Funktion tmpfile (p: 303)
  • K.3.5.1.1 Die Funktion tmpfile_s (p: 586-587)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.19.4.3 Die Funktion tmpfile (p: 269)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.9.4.3 Die Funktion tmpfile

[bearbeiten] Siehe auch

gibt einen eindeutigen Dateinamen zurück
(Funktion) [bearbeiten]
C++ Dokumentation für tmpfile