Книга: Программирование для Linux. Профессиональный подход

Листинг Б.6. (read-file.c) Загрузка файла в буфер

Листинг Б.6. (read-file.c) Загрузка файла в буфер

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
/* Загрузка содержимого файла FILENAME в память.
   Размер буфера записывается в аргумент LENGTH.
   Создаваемый буфер должен удаляться в вызывающей функции.
   Если аргумент FILENAME не соответствует обычному файлу,
   возвращается NULL. */
char* read_file(const char* filename, size_t* length) {
 int fd;
 struct stat file_info;
 char* buffer;
 /* Открытие файла. */
 fd = open(filename, O_RDONLY);
 /* Получение информации о файле. */
 fstat(fd, &file_info);
 *length = file_info.st_size;
 /* Проверка того, что это обычный файл. */
 if (!S_ISREG(file_info.st_mode)) {
  /* Этот тип файла не поддерживается. */
  close(fd);
  return NULL;
 }
 /* выделение буфера достаточного размера. */
 buffer = (char*)malloc(*length);
 /* Загрузка файла в буфер. */
 read(fd, buffer, *length);
 /* Конец работы. */
 close(fd);
 return buffer;
}

Оглавление книги


Генерация: 1.590. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз