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

Здесь есть возможность читать онлайн «Нейл Мэтью - Основы программирования в Linux» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2009, ISBN: 2009, Издательство: «БХВ-Петербург», Жанр: Программирование, ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Основы программирования в Linux: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Основы программирования в Linux»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Основы программирования в Linux», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

void update_cd() {

FILE *tracks_fp;

char track_name[MAX_STRING];

int len;

int track = 1;

int screen_line = 1;

WINDOW *box_window_ptr;

WINDOW *sub_window_ptr;

clear_all_screen();

mvprintw(PROMPT_LINE, 0, "Re-entering tracks for CD. ");

if (!get_confirm())

return;

move(PROMP_TLINE, 0);

clrtoeol();

remove_tracks();

mvprintw(MESSAGE_LINE, 0, "Enter a blank line to finish");

tracks_fp = fopen(tracks_file, "a");

Примечание

Листинг будет продолжен через минуту; мы хотим сделать краткую паузу, чтобы обратить ваше внимание на ввод данных в обрамленное окно с прокруткой. Хитрость заключается в формировании вложенного окна, рисовании рамки по его краю и создании внутри этого окна нового вложенного окна с прокруткой.

box_window_ptr = subwin(stdscr, BOXED_LINES + 2, BOXED_ROWS + 2,

BOX_LINE_POS - 1, BOX_ROW_POS - 1);

if (!box_window_ptr) return;

box(box_window_ptr, ACS_VLINE, ACS_HLINE);

sub_window_ptr = subwin(stdscr, BOXED_LINES, BOXED_ROWS,

BOX_LINE_POS, BOX_ROW_POS);

if (!sub_window_ptr) return;

scrollok(sub_window_ptr, TRUE);

werase(sub_window_ptr);

touchwin(stdscr);

do {

mvwprintw(sub_window_ptr, screen_line++, BOX_ROW_POS + 2,

"Track %d: ", track);

clrtoeol();

refresh();

wgetnstr(sub_window_ptr, track_name, MAX_STRING);

len = strlen(track_name);

if (len > 0 && track_name[len - 1] = '\n')

track_name[len - 1] = '\0';

if (*track_name)

fprintf(tracks_fp, "%s, %d, %s\n", current_cat, track, track_name);

track++;

if (screen_line > BOXED__LINES - 1) {

/* время начать прокрутку */

scroll(sub_window_ptr);

screen_line--;

}

} while (*track_name);

delwin(sub_window_ptr);

fclose(tracks_fp);

}

Удаление записей

1. remove_cd— последняя функция, вызываемая из функции main.

void remove_cd() {

FILE *titles_fp, *temp_fp;

char entry[MAX_ENTRY];

int cat_length;

if (current_cd[0] == '\0') return;

clear_all_screen();

mvprintw(PROMPT_LINE, 0, "About to remove CD %s: %s. ", current_cat, current_cd);

if (!get_confirm())

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

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

Интервал:

Закладка:

Сделать

Похожие книги на «Основы программирования в Linux»

Представляем Вашему вниманию похожие книги на «Основы программирования в Linux» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «Основы программирования в Linux» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x