Основы программирования в Linux
На нашем литературном портале можно бесплатно читать книгу Основы программирования в Linux, Мэтью Нейл-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Название: Основы программирования в Linux
Автор: Мэтью Нейл
Дата добавления: 16 январь 2020
Количество просмотров: 1 187
Основы программирования в Linux читать книгу онлайн
Основы программирования в Linux - читать бесплатно онлайн , автор Мэтью Нейл
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Перейти на страницу:
if (titles_fp) { while (fgets(entry, MAX_ENTRY, titles_fp)) { /* Пропускает прежний номер в каталоге */ catalog = entry; if (found == strstr(catalog, ", ")) { *found = ' '; title = found + 1; /* Стирает следующую запятую в элементе, укорачивая его только до заголовка */ if (found == strstr(title, ", ")) { *found = ' '; /* Теперь проверяет, есть ли совпадающая строка */ 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] = ' ';<i> get_return();</i> }}Хотя переменная
catalogcurrent_catfgets3. Вам также нужно иметь возможность перечислить на экране дорожки выбранного компакт-диска. Для вложенных окон можно использовать директивы
#defineupdate_cd<i>void list_tracks() {</i> 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] == ' ') { mvprintw(ERROR_LINE, 0, "You must select a CD first. ");<i> get_return();</i> return; }<i> clear_all_screen();</i> 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 Listingn"); /* Записывает сведения о дорожке на панель */ 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);
Перейти на страницу:
