Namespaces
Variants

std:: tmpnam

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert in Header <cstdio>
char * tmpnam ( char * filename ) ;

Erzeugt einen eindeutigen Dateinamen, der nicht den Namen einer aktuell existierenden Datei trägt, und speichert ihn in der Zeichenkette, auf die filename zeigt. Die Funktion kann bis zu TMP_MAX eindeutige Dateinamen generieren, aber einige oder alle davon könnten bereits in Verwendung sein und sind daher nicht als Rückgabewerte geeignet.

std::tmpnam modifiziert statischen Zustand und ist nicht zwingend threadsicher.

Inhaltsverzeichnis

Parameter

filename - Zeiger auf das Zeichenarray, das mindestens L_tmpnam Bytes aufnehmen kann, als Ergebnispuffer verwendet wird. Wenn ein Nullzeiger übergeben wird, wird ein Zeiger auf einen internen statischen Puffer zurückgegeben

Rückgabewert

filename falls filename kein Nullzeiger war. Andernfalls wird ein Zeiger auf einen internen statischen Puffer zurückgegeben. Falls kein geeigneter Dateiname generiert werden kann, wird ein Nullzeiger zurückgegeben.

Hinweise

Obwohl die von std::tmpnam generierten Namen schwer zu erraten sind, ist es möglich, dass eine Datei mit diesem Namen von einem anderen Prozess zwischen dem Zeitpunkt erstellt wird, an dem std::tmpnam zurückkehrt, und dem Zeitpunkt, an dem dieses Programm versucht, den zurückgegebenen Namen zum Erstellen einer Datei zu verwenden. Die Standardfunktion std::tmpfile und die POSIX-Funktion mkstemp haben dieses Problem nicht (die Erstellung eines eindeutigen Verzeichnisses nur mit der Standard-C-Bibliothek erfordert jedoch weiterhin die Verwendung von tmpnam ).

POSIX-Systeme definieren zusätzlich die ähnlich benannte Funktion tempnam , die die Wahl eines Verzeichnisses bietet (welches standardmäßig auf den optional definierten Makro P_tmpdir zurückgreift).

Beispiel

#include <cstdio>
#include <iostream>
#include <string>
int main()
{
    std::string name1 = std::tmpnam(nullptr);
    std::cout << "temporary file name: " << name1 << '\n';
    char name2[L_tmpnam];
    if (std::tmpnam(name2))
        std::cout << "temporary file name: " << name2 << '\n';
}

Mögliche Ausgabe:

temporary file name: /tmp/fileDjwifs
temporary file name: /tmp/fileEv2bfW

Siehe auch

erstellt und öffnet eine temporäre, automatisch entfernende Datei
(Funktion)
gibt ein Verzeichnis für temporäre Dateien zurück
(Funktion)
C-Dokumentation für tmpnam