Основы программирования в Linux - Мэтью Нейл
- Дата:08.09.2024
- Категория: Компьютеры и Интернет / Интернет
- Название: Основы программирования в Linux
- Автор: Мэтью Нейл
- Просмотров:0
- Комментариев:0
Шрифт:
Интервал:
Закладка:
}
} while (*track_name);
delwin(sub_window_ptr);
fclose(tracks_fp);
}
Удаление записей1. remove_cd — последняя функция, вызываемая из функции main.
<i>void remove_cd() {</i>
FILE *titles_fp, *temp_fp;
char entry[MAX_ENTRY];
int cat_length;
if (current_cd[0] == ' ') return;
<i> clear_all_screen();</i>
mvprintw(PROMPT_LINE, 0, "About to remove CD %s: %s. ", current_cat, current_cd);
<i> if (!get_confirm())</i>
return;
cat_length = strlen(current_cat);
/* Файл заголовков копируется во временный, игнорируя данный CD */
titles_fp = fopen(title_file, "r");
temp_fp = fopen(temp_flie, "w");
while(fgets(entry, MAX_ENTRY, titles_fp)) {
/* Сравнивает номер в каталоге и копирует элемент, если не
найдено совпадение */
if (strncmp(current_cat, entry, cat_length) != 0)
fputs(entry, temp_fp);
}
fclose(titles_fp);
fclose(temp_fp);
/* Удаляет файл заголовков и переименовывает временный файл */
unlink(title_file);
rename(temp_file, title_file);
/* Теперь делает то же самое для файла дорожек */
remove_tracks();
/* Устанавливает 'None' для текущего CD */
current_cd[0] = ' ';
}
2. Теперь вам только нужен программный код функции remove_tracks, удаляющей дорожки текущего компакт-диска. Она вызывается двумя функциями — update_cd и remove_cd.
<i>void remove_tracks() {</i>
FILE *tracks_fp, *temp_fp;
char entry[MAX_ENTRY];
int cat_length;
if (current_cd[0] == ' ') return;
cat_length = strlen(current_cat);
tracks_fp = fopen(tracks_file, "r");
if (tracks_fp == (FILE *)NULL) return;
temp_fp = fopen(temp_file, "w");
while (fgets(entry, MAX_ENTRY, tracks_fp)) {
/* Сравнивает номер в каталоге и копирует элемент, если не
найдено совпадение */
if (strncmp(current_cat, entry, cat_length) != 0)
fputs(entry, temp_fp);
}
fclose(tracks_fp);
fclose(temp_fp);
/* Удаляет файл дорожек<i> и</i> переименовывает временный файл */
unlink(tracks_file);
rename(temp_file, tracks_file);
}
Запросы к базе данных компакт-дисков
Теперь рассмотрим функции для доступа к данным, которые для упрощения доступа хранятся в паре простых файлов как поля, разделенные запятыми.
1. Страстным коллекционерам важно знать, каким богатством они обладают или сколько собрано. Следующая функция делает это превосходно; она просматривает базу данных, подсчитывая заголовки и дорожки.
<i>void count_cds() {</i>
FILE *titles_fp, *tracks_fp;
char entry[MAX_ENTRY];
int titles = 0;
int tracks = 0;
titles_fp = fopen(title_file, "r");
if (titles_fp) {
while (fgets(entry, MAX_ENTRY, titles_fp))
titles++;
fclose(titles_fp);
}
tracks_fp = fopen(tracks_file, "r");
if (tracks_fp) {
while (fgets(entry, MAX_ENTRY, tracks_fp))
tracks++;
fclose(tracks_fp);
}
mvprintw(ERROR_LINE, 0,
"Database contains %d titles, with a total of %d tracks.", titles, tracks);
get_return();
}
2. Вы потеряли аннотацию к вашему любимому компакт-диску? Не волнуйтесь! Если вы аккуратно ввели подробную информацию в базу данных, теперь можно найти перечень дорожек с помощью функции find_cd. Она предлагает ввести подстроку, совпадение с которой нужно искать в базе данных, и устанавливает в глобальную переменную current_cd заголовок найденного компакт-диска.
<i>void find_cd() {</i>
char match[MAX_STRING], entry[MAX_ENTRY];
FILE *titles_fp;
int count = 0;
char *found, *title, *catalog;
mvprintw(Q_LINE, 0, "Enter a string to search for in CD titles: ");
<i> get_string(match);</i>
titles_fp = fopen(title_file, "r");
- Вопросы истории: UNIX, Linux, BSD и другие - Федорчук Алексей Викторович "alv" - Прочая околокомпьтерная литература
- Linux Mint и его Cinnamon. Очерки применителя - Алексей Федорчук - Программное обеспечение
- Язык программирования C++. Пятое издание - Стенли Липпман - Программирование
- Аквариум. (Новое издание, исправленное и переработанное) - Виктор Суворов (Резун) - Шпионский детектив
- Интерфейс: новые направления в проектировании компьютерных систем - Джефф Раскин - Техническая литература