Некоторые программы должны записывать временные файлы. Вот обычный способ создания имени для такого файла:
(make-temp-file name-of-application)
Задача make-temp-file состоит в том, чтобы предотвратить попытку двух
различных пользователей или двух различных задач использовать одно и то же имя
файла.
Эта функция создает временный файл и возвращает его имя. Emacs
создает имя временного файла, добавляя к prefix некоторые
случайные символы, которые различаются в каждой задаче Emacs. Результат
гарантированно является только что созданным файлом, содержащим text,
если он задан в виде строки, или пустой в противном случае. В MS-DOS эта
функция может усечь prefix, чтобы он соответствовал ограничениям
имен файлов 8+3. Если prefix является относительным именем
файла, оно расширяется относительно temporary-file-directory.
(make-temp-file "foo")
⇒ "/tmp/foo232J6v"
Когда make-temp-file возвращает значение, файл создан и
пуст. В этот момент вы должны записать предполагаемое содержимое в файл.
Если dir-flag не равен nil,
make-temp-file создает пустую директорию вместо пустого файла.
Он возвращает имя файла, а не имя директории, этой директории. См.
Имена директорий.
Если suffix не равен nil,
make-temp-file добавляет его в конец имени файла.
Если text является строкой, make-temp-file
вставляет ее в файл.
Чтобы предотвратить конфликты между различными библиотеками, работающими в
одном Emacs, каждая программа Lisp, использующая make-temp-file,
должна иметь свой собственный prefix. Число, добавляемое в
конец prefix, различает одну и ту же программу, работающую
в разных задачах Emacs. Дополнительные добавленные символы позволяют большое
количество различных имен даже в одной задаче Emacs.
Директория по умолчанию для временных файлов контролируется переменной
temporary-file-directory. Эта переменная предоставляет пользователю
единый способ указания директории для всех временных файлов. Некоторые
программы используют вместо этого small-temporary-file-directory,
если оно не равно nil. Чтобы использовать его, вы должны
расширить префикс относительно соответствующей директории перед вызовом
make-temp-file.
Эта переменная указывает имя директории для создания временных файлов.
Ее значение должно быть именем директории (см. Имена директорий),
но для программ Lisp хорошо, если значение будет именем файла директории.
Использование значения в качестве второго аргумента для
expand-file-name — хороший способ это сделать.
Значение по умолчанию определяется разумным образом для вашей операционной
системы; оно основано на переменных окружения TMPDIR,
TMP и TEMP, с резервным вариантом в виде
зависимого от системы имени, если ни одна из этих переменных не определена.
Даже если вы не используете make-temp-file для создания
временного файла, вы должны использовать эту переменную, чтобы решить, в какой
директории поместить файл. Однако, если вы ожидаете, что файл будет
маленьким, вы должны сначала использовать small-temporary-file-directory,
если оно не равно nil.
Эта переменная указывает имя директории для создания определенных временных файлов, которые, вероятно, будут маленькими.
Если вы хотите записать временный файл, который, вероятно, будет маленьким, вы должны вычислить директорию следующим образом:
(make-temp-file
(expand-file-name prefix
(or small-temporary-file-directory
temporary-file-directory)))
Эта функция генерирует строку, которая может быть уникальным именем
файла. Имя начинается с base-name и имеет несколько
случайных символов, добавленных к нему, которые различаются в каждой задаче
Emacs. Это похоже на make-temp-file, за исключением того,
что (i) она просто конструирует имя и не создает файл, (ii) base-name
должен быть абсолютным именем файла, не являющимся "магическим", и (iii) если
возвращенное имя файла является "магическим", оно может назвать существующий
файл. См. Обеспечение "магических" имен файлов.
Предупреждение: В большинстве случаев вы не должны
использовать эту функцию; используйте вместо нее make-temp-file!
Эта функция подвержена состоянию гонки между вызовом make-temp-name
и созданием файла, что в некоторых случаях может привести к уязвимости безопасности.
Иногда необходимо создать временный файл на удаленном хосте или смонтированной директории. Следующие две функции поддерживают это.
Эта функция похожа на make-temp-file, но она создает
временный файл как можно ближе к default-directory. Если
prefix является относительным именем файла, а default-directory
является удаленным именем файла или находится на смонтированной файловой системе,
временный файл создается в директории, возвращаемой функцией
temporary-file-directory. В противном случае используется функция
make-temp-file. prefix, dir-flag и
suffix имеют то же значение, что и в make-temp-file.
(let ((default-directory "/ssh:remotehost:"))
(make-nearby-temp-file "foo"))
⇒ "/ssh:remotehost:/tmp/foo232J6v"
Директория для записи временных файлов с помощью
make-nearby-temp-file. В случае удаленного
default-directory это директория для временных файлов на
этом удаленном хосте. Если такая директория не существует или
default-directory должен находиться на смонтированной файловой
системе (см. mounted-file-systems), функция возвращает
default-directory. Для не удаленного и не смонтированного
default-directory возвращается значение переменной
temporary-file-directory.
Чтобы извлечь локальную часть имени файла временного файла, используйте
file-local-name (см. Обеспечение "магических" имен файлов).