tmpfile, tmpfile_s
|
Definiert in Header
<stdio.h>
|
||
|
FILE
*
tmpfile
(
void
)
;
|
(1) | |
|
errno_t tmpfile_s
(
FILE
*
restrict
*
restrict
streamptr
)
;
|
(2) | (seit C11) |
-
Wie bei allen bounds-checked-Funktionen ist
tmpfile_snur 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
Rückgabewert
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
|
(C11)
|
gibt einen eindeutigen Dateinamen zurück
(Funktion) |
|
C++-Dokumentation
für
tmpfile
|
|