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.