Namespaces
Variants

tmpfile, tmpfile_s

From cppreference.net
< c ‎ | io
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 Update geöffnet (wie durch fopen mit "wb+" Modus). Der Dateiname ist garantiert eindeutig innerhalb des Dateisystems. Mindestens TMP_MAX Dateien können während der Lebensdauer eines Programms geöffnet werden (dieses Limit kann mit tmpnam geteilt werden und kann weiter durch FOPEN_MAX eingeschränkt sein).
2) Gleich wie (1) , außer dass mindestens TMP_MAX_S Dateien geöffnet werden können (das Limit kann mit tmpnam_s geteilt werden), und falls streamptr ein Nullzeiger ist, wird die aktuell installierte Constraint-Handler -Funktion aufgerufen.
Wie bei allen bounds-checked-Funktionen ist tmpfile_s nur garantiert verfügbar, falls __STDC_LIB_EXT1__ durch die Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ auf die Integer-Konstante 1 setzt, bevor <stdio.h> eingebunden wird.

Die von dieser Funktion erstellte temporäre Datei wird geschlossen und gelöscht, wenn das Programm normal beendet wird. Ob sie bei abnormalem Beenden gelöscht wird, ist implementierungsdefiniert.

Inhaltsverzeichnis

Parameter

1) (keine)
2) Zeiger auf einen Zeiger, der durch diesen Funktionsaufruf aktualisiert wird

Rückgabewert

1) Zeiger auf den Dateistrom, der mit der Datei verknüpft ist, oder Nullzeiger, falls 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 werden konnte oder wenn streamptr ein Nullzeiger war. Zusätzlich wird bei Erfolg ein Zeiger auf den zugehörigen Dateistream in * streamptr gespeichert, und bei einem Fehler wird ein Nullzeigerwert in * streamptr gespeichert.

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 geöffneter Dateideskriptor für eine gelöschte Datei von einem Programm gehalten wird, 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

#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)

Referenzen

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

Siehe auch

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