Книга: Программирование для Linux. Профессиональный подход
Листинг 2.5. (temp_file.c) Использование функции mkstemp()
Листинг 2.5. (temp_file.c) Использование функции mkstemp()
#include <stdlib.h>
#include <unistd.h>
/* дескриптор временного файла, созданного в функции
write_temp_file(). */
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);
/* немедленное удаление ссылки на файл, благодаря чему он будет
удален сразу же после закрытия дескриптора файла. */
unlink(temp_filename);
/* Сначала в файл записывается число, определяющее размер
буфера. */
write(fd, &length, sizeof(length));
/* теперь записываем сами данные. */
write(fd, buffer, length);
/* Возвращаем дескриптор файла. */
return fd;
}
/* Чтение содержимого временного файла, созданного в функции
write_temp_file(). Создается и возвращается буфер с содержимым
файла. Этот буфер должен быть удален в вызывающей подпрограмме
с помощью функции free(). В параметр LENGTH записывается размер
буфера в байтах. В конце временный файл удаляется. */
char* read_temp_file(temp_file_handle temp_file, size_t* length) {
char* buffer;
/* TEMP_FILE -- это дескриптор временного файла. */
int fd = temp_file;
/* переход в начало файла. */
lseek(fd, 0, SEEK_SET);
/* Определение объема данных, содержащихся во временном файле. */
read(fd, length, sizeof(*length));
/* Выделение буфера и чтение данных. */
buffer = (char*)malloc(*length);
read(fd, buffer, *length);
/* Закрытие дескриптора файла, что приведет к уничтожению
временного файла. */
close(fd);
return buffer;
}
- Функция mkstemp()
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Восстановление с использованием инструмента gbak
- Shared Cache file
- Типы страниц и их использование
- Использование констант
- Аргументы функции в Python
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- 3. Функции
- Новые функции API для работы с Blob и массивами