tmpnam()

tmpnam() ist definiert in der stdio, die in C über stdio.h, bzw. in C++ über cstdio eingebunden wird.

Funktion

tmpnam() erstellt einen Dateinamen, der sich von allen anderen Dateien unterscheidet und verwendet werden kann, ohne eine andere Datei zu überschreiben.

Signatur

#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.

Fehlerquellen

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.

Beispiel

#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.

siehe auch