Нейл Мэтью - Основы программирования в Linux

Тут можно читать онлайн Нейл Мэтью - Основы программирования в Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство «БХВ-Петербург», год 2009. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Основы программирования в Linux
  • Автор:
  • Жанр:
  • Издательство:
    «БХВ-Петербург»
  • Год:
    2009
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0289-4
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Нейл Мэтью - Основы программирования в Linux краткое содержание

Основы программирования в Linux - описание и краткое содержание, автор Нейл Мэтью, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

Для начинающих Linux-программистов

Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)

Основы программирования в Linux - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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] = '\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);

}

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

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

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;

if (found == strstr(catalog, ", ")) {

*found = '\0';

title = found + 1;

/* Стирает следующую запятую в элементе, укорачивая его

только до заголовка */

if (found == strstr(title, ", ")) {

*found = '\0';

/* Теперь проверяет, есть ли совпадающая строка */

if (found == strstr(title, match)) {

count++;

strcpy(current_cd, title);

strcpy(current_cat, catalog);

}

}

}

}

fclose(titles_fp);

}

if (count != 1) {

if (count == 0) {

mvprintw(ERROR_LINE, 0, "Sorry, no matching CD found. ");

}

if (count > 1) {

mvprintw(ERROR_LINE, 0,

"Sorry, match is ambiguous: CDs found. ", count);

}

current_cd[0] = '\0';

get_return();

}

}

Хотя переменная catalogуказывает на массив, больший чем current_cat, и могла бы переписать память, проверка в функции fgetsпрепятствует этому.

3. Вам также нужно иметь возможность перечислить на экране дорожки выбранного компакт-диска. Для вложенных окон можно использовать директивы #define, применявшиеся в функции update_cdв предыдущем разделе.

void list_tracks() {

FILE *tracks_fp;

char entry[MAX_ENTRY];

int cat_length;

int lines_op = 0;

WINDOW *track_pad_ptr;

int tracks = 0;

int key;

int first_line = 0;

if (current_cd[0] == '\0') {

mvprintw(ERROR_LINE, 0, "You must select a CD first. ");

get_return();

return;

}

clear_all_screen();

cat_length = strlen(current_cat);

/* Сначала считает количество дорожек у текущего CD */

tracks_fp = fopen(tracks_file, "r");

if (!tracks_fp) return;

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

if (strncmp(current_cat, entry, cat_length) == 0) tracks++;

}

fclose(tracks_fp);

/* Создает новую панель, гарантируя, что даже при наличии одной

дорожки панель достаточна большая, поэтому последующий вызов

prefresh() всегда будет допустим. */

track_pad_ptr = newpad(tracks + 1 + ВОХЕD_LINES, BOXED_ROWS + 1);

if (!track_pad_ptr) return;

tracks_fp = fopen(tracks_file, "r");

if (!tracks_fp) return;

mvprintw(4, 0, "CD Track Listing\n");

/* Записывает сведения о дорожке на панель */

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

/* Сравнивает номер каталога и оставшийся вывод элемента */

if (strncmp(current_cat, entry, cat_length) == 0) {

mvwprintw(track_pad_ptr, lines_op++, 0, "%s", entry + cat_length + 1);

}

}

fclose(tracks_fp);

if (lines_op > BOXED_LINES) {

mvprintw(MESSAGE_LINE, 0,

"Cursor keys to scroll, RETURN or q to exit");

} else {

mvprintw(MESSAGE_LINE, 0, "RETURN or q to exit");

}

wrefresh(stdscr);

keypad(stdscr, TRUE);

cbreak();

noecho();

key = 0;

while (key != "q" && key != KEY_ENTER && key != '\n') {

if (key == KEY_UP) {

if (first_line > 0) first_line--;

}

if (key == KEY_DOWN) {

if (first_line + BOXED_LINES + 1 < tracks) first_line++;

}

/* Теперь рисует соответствующую часть панели на экране */

prefresh(track_pad_ptr, first_line, 0, BOX_LINE_POS, BOX_ROW_POS,

BOX_LINE_POS + BOXED_LINES, BOX_ROW_POS + BOXED_ROWS);

key = getch();

}

delwin(track_pad_ptr);

keypad(stdsсr, FALSE);

nocbreak();

echo();

}

4. В последних двух функциях вызывается функция get_return, которая приглашает к вводу и считывает символ возврата каретки, игнорируя другие символы.

void get_return() {

int ch;

mvprintw(23, 0, "is", " Press return ");

refresh();

while ((ch = getchar()) != '\n' && ch != EOF);

}

Если вы выполните эту программу, то увидите на экране нечто похожее на рис. 6.10.

Рис 610 Резюме В этой главе вы изучили библиотеку curses Она предлагает - фото 20

Рис. 6.10

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Нейл Мэтью читать все книги автора по порядку

Нейл Мэтью - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Основы программирования в Linux отзывы


Отзывы читателей о книге Основы программирования в Linux, автор: Нейл Мэтью. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x