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



         

Пример 5.22 - часть 2


информацию из файла %s\n", path);

return (-1);

}

if (n_txts > max_n_txt) {

fprintf (stderr, "***** Новая верхняя

граница числа сообщений %lu больше

существующей %lu\n", n_txts, max_n_txt);

}

} else {

/* Файла нет или он не наш */

(void) fclose (fp);

if ((fp = fopen (path, "w+")) == NULL) {

fprintf (stderr, "Не удается открыть файл

%s\n", path);

return (-1);

}

tte.l_txt = magic = G_TXT_MAGIC;

tte.off_txt = max_n_txt = n_txts;

if (fwrite (&tte, sizeof (txt_table_elem), 1, fp) != 1) {

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

информацию в файл %s\n", path);

return (-1);

}

/* Пропишем нулями индексную таблицу */

/* Заодно конец файла окажется в будущем */

/* начале текстов */

tte.l_txt = 0;

tte.off_txt = 0;

for (i = 0; i < max_n_txt; i++) {

if (fwrite (&tte, sizeof (txt_table_elem), 1, fp) != 1) {

fprintf (stderr, "Не удается записать информацию

в файл %s\n", path);

return (-1);

}

}

} /* if - существует ли файл с текстами */

return 0;

}

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

/* Функция для добавления одного текста */

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

int g_add_txt (const unsigned long n_t, const char *txt) {

unsigned int l; /* Длина текста txt */

txt_table_elem tte;

if (n_t >= max_n_txt) {

fprintf (stderr, "Номер текста: %lu должен

быть меньше: %lu\n", n_t, max_n_txt);

return (-1);

}

l = strlen (txt);

tte.l_txt = l;

if (fseek (fp, 0L, SEEK_END)) {

fprintf (stderr, "Ошибка позиционирования при

добавлении текста номер %lu\n", n_t);

return (-1);

}

tte.off_txt = ftell (fp);

if (fseek (fp, (n_t + 1) * sizeof (txt_table_elem), SEEK_SET)) {

fprintf (stderr, "Ошибка позиционирования при

добавлении текста номер %lu\n", n_t);

return (-1);

}

if (fwrite (&tte, sizeof (tte), 1, fp) != 1) {

fprintf (stderr, "Ошибка записи при добавлении

текста номер %lu\n", n_t);

return (-1);

}

if (fseek (fp, tte.off_txt, SEEK_SET)) {




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