Программирование в стандарте POSIX


Пример 5.22


/* * * * * * * * * * * * * * * * * * * * * * * */

/* Набор функций для занесения текстов в файл, */

/* который составляется из двух частей: */

/* таблицы длин и смещений текстов от начала */

/* файла собственно текстов */

/* */

/* В начало файла помещается специальный */

/* элемент таблицы с магическим числом и общим */

/* количеством текстов */

/* * * * * * * * * * * * * * * * * * * * * * * */

#include

#include

/* Магическое число файла с текстами */

#define G_TXT_MAGIC 0x1993

/* Элемент таблицы длин и смещений */

typedef struct {

unsigned int l_txt; /* Длина текста (без */

/* (нулевого байта) */

unsigned long off_txt; /* Смещение текста от */

/* начала файла */

} txt_table_elem;

static FILE *fp = NULL;/* Указатель на поток */

/* файла с текстами */

static unsigned long max_n_txt; /* Общее число */

/* текстов в файле */

/* * * * * * * * * * * * * * * * * * * * * * * */

/* Функция для инициализации набора. */

/* n_txts - максимальное число добавляемых текстов */

/* * * * * * * * * * * * * * * * * * * * * * * */

int g_init_add_txt (const int argc, char *argv [],

const unsigned long n_txts) {

char *path; /* Имя файла, куда нужно поместить

тексты */

int magic; /* Магическое число файла с текстами */

txt_table_elem tte;

unsigned int i;

if (argc != 2) {

fprintf (stderr, "Использование: %s

файл_для_текстов\n", argv [0]);

return (-1);

}

path = argv [1];

/* Аккуратно откроем файл с текстами */

/* Если он уже есть и в нем правильное */

/* магическое число, */

/* будем добавлять тексты. */

/* В противном случае создадим и */

/* инициализируем файл */

if (((fp = fopen (path, "r+")) != NULL) && (fread (&magic, sizeof (unsigned int), 1, fp) == 1) && (magic == G_TXT_MAGIC)) {

/* Перед нами - наш файл */

/* Проверим, не превышает ли заказанная */

/* верхняя граница существующую */

if (fread (&max_n_txt, sizeof (unsigned long), 1, fp) != 1) {

fprintf (stderr, "Не удается прочитать




Начало  Назад  Вперед



Книжный магазин