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


         

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


/* * * * * * * * * * * * * * * * * * * * * * * */
/* Набор функций для занесения текстов в файл, */
/* который составляется из двух частей: */
/* таблицы длин и смещений текстов от начала */
/* файла собственно текстов */
/* */
/* В начало файла помещается специальный */
/* элемент таблицы с магическим числом и общим */
/* количеством текстов */
/* * * * * * * * * * * * * * * * * * * * * * * */
#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, "Не удается прочитать

Содержание  Назад  Вперед