RAD Studio
ContentsIndex
PreviousUpNext
_tempnam, _wtempnam

Header File 

stdio.h  

Category 

Input/output Routines 

Prototype 

char *_tempnam(char *dir, char *prefix) 

wchar_t *_wtempnam(wchar_t *dir, wchar_t *prefix) 

Description 

Creates a unique file name in specified directory. 

The _tempnam function accepts single-byte or multibyte string arguments. 

The _tempnam function creates a unique file name in arbitrary directories. The unique file is not actually created; _tempnam only verifies that it does not currently exist. It attempts to use the following directories, in the order shown, when creating the file name:

  • The directory specified by the TMP environment variable.
  • The dir argument to _tempnam.
  • The P_tmpdir definition in stdio.h. If you edit stdio.h and change this definition, _tempnam will not use the new definition.
  • The current working directory.
If any of these directories is NULL, or undefined, or does not exist, it is skipped. 

The prefix argument specifies the first part of the file name; it cannot be longer than 5 characters, and cannot contain a period (.). A unique file name is created by concatenating the directory name, the prefix, and 6 unique characters. Space for the resulting file name is allocated with malloc; when this file name is no longer needed, the caller should call free to free it. 

If you do create a temporary file using the name constructed by _tempnam, it is your responsibility to delete the file name (for example, with a call to remove). It is not deleted automatically. (tmpfile does delete the file name.) 

Return Value 

If _tempnam is successful, it returns a pointer to the unique temporary file name, which the caller can pass to free when it is no longer needed. Otherwise, if _tempnam cannot create a unique file name, it returns NULL. 

Example  

#include <stdio.h>
#include <stdlib.h>
void main(void)
{
  FILE *stream;
  int i;
  char *name;
  for (i = 1; i <= 10; i++) {
    if ((name = tempnam("\\tmp","wow")) == NULL)
      perror("tempnam couldn't create name");
    else {
      printf("Creating %s\n",name);
      if ((stream = fopen(name,"wb")) == NULL)
        perror("Could not open temporary file\n");
      else
        fclose(stream);
    }
    free(name);
  }
  printf("Warning: temp files not deleted.\n");
}

Portability

 
POSIX 
Win32 
ANSI C 
ANSI C++ 
_tempnam 
 
 
 
_wtempnam 
 
 
 
Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
What do you think about this topic? Send feedback!