tmpnam()

Сгенерировать уникальную строку для использования в качестве имени файла

Прототип:

#include <stdio.h>
char * tmpnam( char *buffer );

Аргументы:

buffer
NULL или указатель на буфер, в который функция сохранит имя файла. Если buffer не равен NULL, то он должен быть не меньше L_tmpnam байт длиной.

Библиотека:

libc

Описание:

Функция tmpnam() создаёт уникальную строку, являющимся корректным именем файла, не дублирующим существующий файл.

Функция tmpnam() создаёт до TMP_MAX уникальных имён файлов прежде чем начнёт переиспользовать их:

Созданное имя файла в качестве префикса содержит первую доступную директорию, находящуюся в:

Если все эти пути недоступны, tmpnam() пробует использовать /tmp, а затем текущую рабочую директорию.

Созданное имя файла хранится во внутреннем буфере; если buffer равен NULL, функция вернёт указатель на этот буфер; в противном случае tmpnam() копирует имя файла в buffer.

Последовательные вызовы tmpnam() переиспользуют внутренний буфер. Если аргумент buffer равен NULL, может потребоваться продублировать возвращаемую строку. Например,

char *name1, *name2;
name1 = strdup( tmpnam( NULL ) );
name2 = strdup( tmpnam( NULL ) );

Возвращаемое значение:

Указатель на созданное имя файла при успешном завершении.

Если возникла ошибка функция возвращает NULL, код ошибки записывается в errno.

Примеры:

#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char filename[L_tmpnam];
FILE *fp;
tmpnam( filename );
fp = fopen( filename, "w+b" );
...
fclose( fp );
remove( filename );
return (EXIT_SUCCESS);
}

Классификация:

ANSI, POSIX 1003.1

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Смотри ниже

Предостережения:

Функция tmpnam() не является потоко-безопасной, если передавать в неё NULL буфер.

Функция только создаёт имена файлов; приложение должно само создавать и удалять файлы.

Возможна ситуация, когда другой поток или процесс создадут файл с таким же именем между созданием имени файла и открытием файла.

Тематические ссылки:

tempnam(), tmpfile()




Предыдущий раздел: Описание API системной библиотеки