std::tmpnam
| Definiert in Header <cstdio> |
||
| char* tmpnam( char* filename ); |
||
Erzeugt einen eindeutigen Dateinamen, der keiner derzeit existierenden Datei entspricht, und speichert ihn in der Zeichenkette, auf die von filename gezeigt wird. Die Funktion kann bis zu TMP_MAX eindeutige Dateinamen generieren, aber einige oder alle davon könnten bereits in Gebrauch sein und somit keine geeigneten Rückgabewerte darstellen.
std::tmpnam modifiziert statischen Zustand und muss nicht zwingend threadsicher sein.
Inhalt |
[bearbeiten] Parameter
| filename | - | Zeiger auf das Zeichen-Array, das in der Lage ist, mindestens L_tmpnam Bytes aufzunehmen, das als Ergebnisbuffer verwendet wird. Wenn ein Nullzeiger übergeben wird, wird ein Zeiger auf einen internen statischen Buffer zurückgegeben. |
[bearbeiten] Rückgabewert
filename, wenn filename kein Nullzeiger war. Andernfalls wird ein Zeiger auf einen internen statischen Buffer zurückgegeben. Wenn kein geeigneter Dateiname generiert werden kann, wird ein Nullzeiger zurückgegeben.
[bearbeiten] Hinweise
Obwohl die von std::tmpnam generierten Namen schwer zu erraten sind, besteht die Möglichkeit, dass eine Datei mit diesem Namen von einem anderen Prozess erstellt wird zwischen dem Moment, an dem std::tmpnam zurückkehrt, und dem Moment, an dem dieses Programm versucht, den zurückgegebenen Namen zur Erstellung 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 immer noch die Verwendung von tmpnam).
POSIX-Systeme definieren zusätzlich die ähnlich benannte Funktion tempnam, die die Wahl eines Verzeichnisses anbietet (welches standardmäßig das optional definierte Makro P_tmpdir ist).
[bearbeiten] 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
[bearbeiten] Siehe auch
| erstellt und öffnet eine temporäre, automatisch zu löschende Datei (function) | |
| (C++17) |
gibt ein Verzeichnis zurück, das für temporäre Dateien geeignet ist (Funktion) |
| C-Dokumentation für tmpnam
| |