tmpnam()
ist definiert in der stdio
, die in C über stdio.h
, bzw. in C++ über cstdio
eingebunden wird.
tmpnam()
erstellt einen Dateinamen, der sich von allen anderen Dateien unterscheidet und verwendet werden kann, ohne eine andere Datei zu überschreiben.
#include <stdio.h> char * tmpnam( char * str );
string: Zeiger auf ein char-Array, das mindestens die L_tmpnam
Zeichen breit ist, alternativ NULL
.
Return Value: Zeiger auf den generierten Namen. Wenn der Parameter string
gesetzt war, wird string
zurückgegeben. Wurde NULL als string
übergeben, so wird ein Zeiger auf ein internes statisches Array zurückgegeben. Schlägt tmpnam()
fehl, so wird NULL
zurückgegeben.
Wird NULL
für string
übergeben, so wird der Name in einem internen statischen Array erzeugt, dass durch andere Funktionen überschrieben werden könnte. Daher ist es ratsam, den Dateinamen in einem eigenen Array erzeugen zu lassen.
#include <stdlib.h> #include <stdio.h> int main( void ) { char buffer1[ L_tmpnam ], buffer2[ L_tmpnam ]; char *result1, *result2; tmpnam( buffer1 ); result1 = tmpnam( NULL ); tmpnam( buffer2 ); result2 = tmpnam( NULL ); printf( "buffer1: %s\n", buffer1 ); printf( "result1: %s\n", result1 ); printf( "buffer2: %s\n", buffer2 ); printf( "result2: %s\n", result2 ); return EXIT_SUCCESS; }
Ausgabe:
buffer1: /var/tmp/tmp.0.GQj1JX result1: /var/tmp/tmp.3.HDHkP9 buffer2: /var/tmp/tmp.2.itFpKU result2: /var/tmp/tmp.3.HDHkP9
Hierbei fällt auf, dass beide result-Einträge gleich sind: Das interne, statische Array wurde beim zweiten Aufruf wieder überschrieben.