Сгенерировать уникальную строку для использования в качестве имени файла
#include <stdio.h>char * tmpnam( char *buffer );
NULL
или указатель на буфер, в который функция сохранит имя файла. Если buffer не равен NULL
, то он должен быть не меньше L_tmpnam байт длиной.libc
Функция tmpnam() создаёт уникальную строку, являющимся корректным именем файла, не дублирующим существующий файл.
Функция tmpnam() создаёт до TMP_MAX
уникальных имён файлов прежде чем начнёт переиспользовать их:
000000
. Созданное имя файла в качестве префикса содержит первую доступную директорию, находящуюся в:
TMPDIR
<stdio.h>
) _PATH_TMP
(определена в <paths.h>
) Если все эти пути недоступны, 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
буфер.
Функция только создаёт имена файлов; приложение должно само создавать и удалять файлы.
Возможна ситуация, когда другой поток или процесс создадут файл с таким же именем между созданием имени файла и открытием файла.
Предыдущий раздел: Описание API системной библиотеки