Читаем Основы программирования в Linux полностью

 /* Файл заголовков копируется во временный, игнорируя данный 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] = '\0';

}

2. Теперь вам только нужен программный код функции remove_tracks, удаляющей дорожки текущего компакт-диска. Она вызывается двумя функциями — update_cd и remove_cd.

void remove_tracks() {

 FILE *tracks_fp, *temp_fp;

 char entry[MAX_ENTRY];

 int cat_length;

 if (current_cd[0] == '\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);

 /* Удаляет файл дорожек и переименовывает временный файл */

 unlink(tracks_file);

 rename(temp_file, tracks_file);

}

<p>Запросы к базе данных компакт-дисков</p>

Теперь рассмотрим функции для доступа к данным, которые для упрощения доступа хранятся в паре простых файлов как поля, разделенные запятыми.

1. Страстным коллекционерам важно знать, каким богатством они обладают или сколько собрано. Следующая функция делает это превосходно; она просматривает базу данных, подсчитывая заголовки и дорожки.

void count_cds() {

 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 заголовок найденного компакт-диска.

void find_cd() {

 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: ");

 get_string(match);

 titles_fp = fopen(title_file, "r");

 if (titles_fp) {

  while (fgets(entry, MAX_ENTRY, titles_fp)) {

   /* Пропускает прежний номер в каталоге */

   catalog = entry;

Перейти на страницу:

Похожие книги

Полное руководство по Microsoft Windows XP
Полное руководство по Microsoft Windows XP

В книге известного американского автора описывается среда ОС Windows XP и принципы ее функционирования, приведен сравнительный анализ Windows XP с предшествующими версиями операционной системы Windows. Рассматриваются вопросы применения и модификации нового интерфейса с целью получения прямого доступа ко всем функциям Windows XP обсуждаются варианты подключения к компьютерным сетям. Несколько разделов посвящены работе с реестром и конфигурационными файлами, мультимедийным функциям и разнообразным системным службам, а также методам решения проблем с программным обеспечением и оборудованием. Особое внимание уделено обеспечению безопасности операционной системы.Издание адресовано пользователям и сетевым администраторам, желающим активно применять возможности операционной системы Windows XP (в том числе и недокументированные).

Джон Поль Мюллер , Питер Нортон

ОС и Сети / Книги по IT
Сетевые средства Linux
Сетевые средства Linux

В этой книге описаны принципы действия и область применения многих серверов, выполняющихся в системе Linux. Здесь рассматриваются DHCP-сервер, серверы Samba и NFS, серверы печати, NTP-сервер, средства удаленной регистрации и система X Window. He забыты и средства, традиционно используемые для обеспечения работы Internet-служб: серверы DNS, SMTP, HTTP и FTP. Большое внимание уделено вопросам безопасности сети. В данной книге нашли отражения также средства удаленного администрирования — инструменты Linuxconf, Webmin и SWAT.Данная книга несомненно окажется полезной как начинающим, так и опытным системным администраторам.Отзывы о книге Сетевые средства LinuxПоявилась прекрасная книга по Linux, осталось воспользоваться ею. Не упустите свой шанс.Александр Стенцин, Help Net Security, www.net-security.orgЕсли вы стремитесь в полной мере использовать сетевые возможности Linux — эта книга для вас. Я настоятельно рекомендую прочитать ее.Майкл Дж. Джордан, Linux OnlineВыхода подобной книги давно ожидали читатели. Менее чем на 700 страницах автор смог изложить суть самых различных вопросов, связанных с работой Linux. Автор является высококвалифицированным специалистом в своей области и щедро делится своими знаниями с читателями.Роджер Бертон, West, DiverseBooks.com

Родерик В. Смит

ОС и Сети, интернет / ОС и Сети / Книги по IT