- 2.1.7. Временные файлы
- Читайте также
- Временные характеристики процесса
- Пример: временные характеристики процессов
- Временные серверы для Linux
- 7. Временные рамки
- Временные диаграммы усилителей
- Временные диаграммы
- R.12.2 Временные объекты
- 7.2.6.1. Временные файлы
- 7.2.6.1. Временные файлы
- Исходные файлы и выполняемые файлы
- Временные значения
- Временные таблицы
- Постоянные «временные» таблицы
- Временные файлы проектов
- Команда Linux mktemp для начинающих (5 примеров)
- Команда Linux mktemp
- Q1. Как создать временный файл с помощью mktemp?
- Q2. Как создать временный каталог с помощью mktemp?
- Q3. Как вы можете дать своему временному файлу / каталогу собственное имя?
- Q4. Как добавить суффикс в конец имени файла / прямого имени?
- Q5. Как можно запустить только пробный запуск с mktemp?
- Заключение
- Руководство по команде mktemp с примерами для начинающих
- Руководство по команде mktemp с примерами
- Зачем нам на самом деле нужен mktemp?
2.1.7. Временные файлы
2.1.7. Временные файлы
Иногда программе требуется создать временный файл, например для промежуточного хранения большого объема данных или для передачи данных другой программе. В системах GNU/Linux временные файлы хранятся в каталоге /tmp. Работая с временными файлами, необходимо помнить о следующих ловушках.
? Одновременно может быть запущено несколько экземпляров программы (одним и тем же пользователем или разными пользователями). Все они должны использовать разные имена временных файлов, чтобы не было конфликтов.
? Права доступа к временным файлам должны задаваться таким образом, чтобы неавторизованные пользователи не могли влиять на работу программы путем модификации или замены временного файла.
? Имена временных файлов должны генерироваться так, чтобы посторонние пользователи не могли их предугадать. В противном случае хакер может воспользоваться задержкой между проверкой факта использования данного имени файла и открытием нового временного файла.
В Linux имеются функции mkstemp() и tmpfile(), решающие все вышеперечисленные проблемы. Выбор между ними делается на основании того, должен ли временный файл передаваться другой программе и какие функции ввода-вывода будут применяться при работе с файлом: низкоуровневые (read(), write() и т.д.) или потоковые (fopen(), fprintf() и т.д.).
Функция mkstemp() генерирует уникальное имя файла на основании переданного ей шаблона, создает временный файл с правами, разрешающими доступ к нему только для текущего пользователя, и открывает файл в режиме чтения/записи. Шаблон имени — это строка, оканчивающаяся последовательностью «XXXXXX» (шесть прописных букв «X»). Функция mkstemp() заменяет каждую букву произвольным символом таким образом, чтобы получилось уникальное имя, и возвращает дескриптор файла. Запись в файл осуществляется с помощью функций семейства write().
Временные файлы, создаваемые функцией mkstemp(), не удаляются автоматически. Ответственность за это возлагается на того, кто запускает программу. (Программисты должны внимательно следить за удалением временных файлов, иначе файловая система /tmp рано или поздно переполнится, приведя всю систему в нерабочее состояние.) Если файл создан для внутреннего использования и не предназначен для передачи другой программе, по окончании работы с ним нужно сразу же вызвать функцию unlink(). Она удаляет из каталога ссылку на файл, но сам файл остается до тех пор, пока не будут закрыты все ссылающиеся на него дескрипторы. Таким образом, программа может продолжать использовать временный файл; он будет удален автоматически сразу после закрытия дескриптора. Операционная система закрывает дескрипторы файлов по окончании работы программы, так что временный файл будет удален даже в случае аварийного завершения программы.
В листинге 2.5 показаны две функции, работающие с временным файлом. Будучи примененными в связке, они позволяют легко переносить содержимое буферов из операторной памяти во временный файл (это дает возможность освобождать и повторно использовать память), а затем загружать данные из файла обратно в память.
Листинг 2.5. (temp_file.c) Использование функции mkstemp()
/* дескриптор временного файла, созданного в функции
typedef int temp_file_handle;
/* Запись указанного числа байтов из буфера во временный файл.
Ссылка на временный файл немедленно удаляется. Возвращается
дескриптор временного файла. */
temp_file_handle write_temp_file(char* buffer, size_t length) <
/* Создание имени файла и самого файла. Цепочка XXXXXX будет
заменена символами, которые сделают имя уникальным. */
char temp_filename() = «/tmp/temp_file.XXXXXX»;
int fd = mkstemp(temp_filename);
/* немедленное удаление ссылки на файл, благодаря чему он будет
удален сразу же после закрытия дескриптора файла. */
/* Сначала в файл записывается число, определяющее размер
/* теперь записываем сами данные. */
write(fd, buffer, length);
/* Возвращаем дескриптор файла. */
/* Чтение содержимого временного файла, созданного в функции
write_temp_file(). Создается и возвращается буфер с содержимым
файла. Этот буфер должен быть удален в вызывающей подпрограмме
с помощью функции free(). В параметр LENGTH записывается размер
буфера в байтах. В конце временный файл удаляется. */
char* read_temp_file(temp_file_handle temp_file, size_t* length) <
/* TEMP_FILE — это дескриптор временного файла. */
int fd = temp_file;
/* переход в начало файла. */
lseek(fd, 0, SEEK_SET);
/* Определение объема данных, содержащихся во временном файле. */
read(fd, length, sizeof(*length));
/* Выделение буфера и чтение данных. */
read(fd, buffer, *length);
/* Закрытие дескриптора файла, что приведет к уничтожению
Если в программе используются функции потокового ввода-вывода библиотеки языка С и передавать временный файл другой программе не нужно, то для работы с временным файлом больше подойдет функция tmpfile(). Она создает и открывает временный файл, возвращая файловый указатель на него. Ссылка на файл уже оказывается удаленной, благодаря чему он уничтожается автоматически при закрытии указателя (с помощью функции fclose()) или при завершении программы.
В Linux есть ряд других функций, предназначенных для генерирования временных файлов или их имен, в частности mktemp(), tmpnam() и tempnam(). Работать с ними нежелательно, поскольку возникают упоминавшиеся выше проблемы, связанные с надежностью и безопасностью.
Читайте также
Временные характеристики процесса
Временные характеристики процесса Воспользовавшись функцией GetProcessTimes, которая в Windows 9x отсутствует, можно получить различные временные характеристики процесса, а именно: истекшее время (elapsed time), время, затраченное ядром (kernel time), и пользовательское время (user time). BOOL
Пример: временные характеристики процессов
Пример: временные характеристики процессов Наш следующий пример (программа 6.2) представляет собой команду timep (от time print — вывод временных параметров), аналогичную UNIX-команде time (поскольку команда time поддерживается процессором командной строки, мы должны использовать для
Временные серверы для Linux
Временные серверы для Linux Сервер NTP для работы в Linux реализуется с помощью программы ntp или ее разновидностей: xntp, xntp3 и xntpd. Символ x в начале имени означает «экспериментальный» (experimental), что не совсем верно, так как эти программы успешно используются в течение нескольких лет.
7. Временные рамки
7. Временные рамки «Как сделать что-то за 15 минут» – это может быть небольшая статья, где вы даете алгоритм решения той или иной проблемы за три минуты. Это очень хорошее название для статей и видео. Вы планируете записать бесплатный каст на 15 минут, в котором
Временные диаграммы усилителей
Временные диаграммы усилителей Чтобы получить временные диаграммы синусоидального входного напряжения и напряжения на стоке, необходимо несколько изменить входной файл. Входное напряжение задается синусоидальной функциейvi 1a 0 sin (0 1mV 5kHz)Анализ переходных процессов
Временные диаграммы
Временные диаграммы Чтобы получить временные диаграммы входного и выходного напряжений, необходимо слегка изменить входной файл. Как и в предыдущем примере, будет использовано синусоидальное входное напряжение:Vi 1 0 sin (0 0. 5V 5kHz)Наряду с анализом переходных процессов
R.12.2 Временные объекты
R.12.2 Временные объекты В некоторых ситуациях транслятору бывает необходимо или удобно создавать временные объекты. Использование временных объектов зависит от реализации. Если транслятору понадобился временный объект типа класса с конструктором, он должен обеспечить
7.2.6.1. Временные файлы
7.2.6.1. Временные файлы Использование временных файлов в качестве буферов обмена данными является старейшей из существующих IPC-методик. Несмотря на недостатки, она остается удобной в сценариях командных интерпретаторов и одноразовых программах, где более сложный и
7.2.6.1. Временные файлы
7.2.6.1. Временные файлы Использование временных файлов в качестве буферов обмена данными является старейшей из существующих IPC-методик. Несмотря на недостатки, она остается удобной в сценариях командных интерпретаторов и одноразовых программах, где более сложный и
Исходные файлы и выполняемые файлы
Исходные файлы и выполняемые файлы Наша замечательная программа, несмотря на свою лаконичность и простоту, для компьютера является совершенно бессмысленным набором символов, так как он «не понимает» директив типа #include или printf. Он понимает только специальный язык,
Временные значения
Временные значения CURRENT_CONNECTION и CURRENT_TRANSACTION не имеют смысла вне текущего соединения и контекста транзакции соответственно. Сервер Firebird сохранит самые последние значения этих идентификаторов в заголовочной странице базы данных. После восстановления базы данных из
Временные таблицы
Временные таблицы Firebird не поддерживает временные таблицы, которые управляются системой. Здесь они меньше нужны, чем в других СУБД. Например, у Firebird есть возможность получать виртуальные таблицы напрямую через хранимую процедуру, написанную с использованием
Постоянные «временные» таблицы
Постоянные «временные» таблицы Популярная модель хранения временных данных для доступа приложений — определить постоянную структуру данных, которая включает «идентификатор сессии» или «идентификатор пакета», получающие значение от генератора, или, в Firebird 1.5,значение
Временные файлы проектов
Временные файлы проектов В ходе работы над проектом Studio создает дополнительные файлы, в которые сохраняет промежуточные данные, такие как результат просчета видеоэффектов, переходов и т. д. Впоследствии данные в этих файлах используются для предварительного просмотра и
Источник
Команда Linux mktemp для начинающих (5 примеров)
Создание временных файлов или каталогов — обычная задача, которую выполняют многие пользователи командной строки Linux. Но знаете ли вы, что есть специальный инструмент командной строки под названием mktemp, который позволяет вам это делать?
В этом руководстве мы обсудим основы команд mktemp на нескольких простых для понимания примерах. Но прежде чем мы это сделаем, стоит отметить, что все приведенные здесь примеры были протестированы на машине Ubuntu 18.04 LTS.
Команда Linux mktemp
Команда mktemp в Linux позволяет пользователям создавать временный файл или каталог. Ниже приводится его синтаксис:
Вот как это объясняется на странице руководства по инструменту:
Ниже приведены некоторые примеры стиля вопросов и ответов, которые должны дать вам хорошее представление о том, как работает команда mktemp.
Q1. Как создать временный файл с помощью mktemp?
Легко. Просто запустите mktemp без каких-либо опций. Вы увидите, что в папке / tmp / создан временный файл.
Например, в моем случае был получен следующий вывод:
Q2. Как создать временный каталог с помощью mktemp?
Это можно сделать с помощью параметра командной строки -d.
Например, в моем случае был получен следующий вывод:
Как видите, название не отражает того факта, что это каталог, это действительно так.
Q3. Как вы можете дать своему временному файлу / каталогу собственное имя?
Как вы могли заметить, mktemp дает случайное имя временному файлу или каталогу, который его создает. Однако при желании вы можете указать собственное имя.
Инструмент предоставляет шаблон, который вы можете использовать. Все, что вам нужно сделать, это указать имя, за которым следует три или более X в продолжении. Эти X заменяются mktemp со случайными символами, так что окончательное имя файла или каталога оказывается уникальным.
Например, я выполнил следующую команду:
И был создан следующий файл:
Обратите внимание, что файлы, созданные таким образом, находятся в текущем рабочем каталоге, а не в каталоге / tmp / (что является поведением по умолчанию).
Q4. Как добавить суффикс в конец имени файла / прямого имени?
В предыдущем разделе мы обсудили, как иметь собственное имя при использовании mktemp. Но таким образом вы можете иметь только начальную часть имени по своему желанию. Что, если вам также нужен суффикс по вашему выбору?
Вы будете рады узнать, что это тоже возможно. Вам просто нужно использовать параметр –suffix. Вот пример:
А вот имя файла, созданного указанной выше командой:
Итак, вы можете видеть, что указанный вами суффикс был добавлен к имени файла.
Q5. Как можно запустить только пробный запуск с mktemp?
Если вы просто хотите, чтобы mktemp отображал имя, а не создавал файл / каталог, вы можете сделать это с помощью параметра командной строки -u.
Заключение
В зависимости от типа работы, которую вы выполняете в командной строке Linux, команда mktemp может оказаться для вас удобным и экономящим время инструментом. Здесь, в этом руководстве, мы обсудили некоторые параметры командной строки, которые предлагает инструмент. Чтобы узнать больше, перейдите на страницу руководства.
Источник
Руководство по команде mktemp с примерами для начинающих
Руководство по команде mktemp с примерами
Mktemp является частью пакета GNU coreutils.
Так что не беспокойтесь об установке.
Мы рассмотрим некоторые практические примеры
Чтобы создать новый временный файл, просто запустите:
Вы увидите вывод, как показано ниже:
Как видно из выходных данных, в каталоге / tmp создается новый временный файл со случайным именем «tmp.yjcVSaKkuv».
Этот файл просто пустой файл.
Как насчет временного каталога?
Да, это тоже возможно!
Чтобы создать временный каталог, используйте параметр -d.
Это создаст случайный пустой каталог в папке / tmp.
Все файлы будут созданы с разрешением u + rw, а каталоги – с u + rwx, за вычетом ограничений umask.
Вы можете проверить права доступа к файлу или каталогу с помощью команды ls.
Точно так же, чтобы создать каталог, просто запустите:
Обратите внимание, что если вы выберете произвольное имя, файлы / каталоги будут создаваться в текущем рабочем каталоге, а не в / tmp.
В этом случае вам необходимо вручную очистить их.
Также, как вы могли заметить, X в имени файла заменяются случайными символами
Однако вы можете добавить любой суффикс по вашему выбору.
Теперь у нас есть суффикс «blog» в конце имени файла.
Если вы не хотите создавать какой-либо файл или каталог, вы можете просто выполнить пробный запуск, как показано ниже.
Для получения справки выполните:
Зачем нам на самом деле нужен mktemp?
Вы можете спросить, зачем нам нужен «mktemp», в то время как мы можем легко создавать пустые файлы с помощью команды «touch filename».
Команда mktemp в основном используется для создания временных файлов / каталогов со случайным именем.
Таким образом, нам не нужно выяснять имена.
Так как mktemp рандомизирует имена, столкновения имен не будет.
К роме того, mktemp создает файл / каталог безопасно с разрешением 600, поэтому другие пользователи не могут получить к нему доступ.
Для более подробной информации, обратитесь к справочным страницам.
Источник