Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
} } while (*track_name); delwin(sub_window_ptr); fclose(tracks_fp);}1.
remove_cdmain<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_tracksupdate_cdremove_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_cdcurrent_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");
