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


         

Файла нет или он не


информацию из файла %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)) {

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