_tempnam, _wtempnam

From RAD Studio
Jump to: navigation, search

Go Up to stdio.h Index

Header File



Input/output Routines


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

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


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.


#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");
  printf("Warning: temp files not deleted.\n");