Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Некоторым программам с использованием curses нужно знать, что библиотека поддерживает структуру
stdscr
stdscr
curscr
Таким образом, процесс вывода символов в программе с применением curses выглядит следующим образом:
1. Используется функция библиотеки curses для обновления логического экрана.
2. Запрашивается у библиотеки curses обновление физического экрана с помощью функции
refresh
Преимущество двухшагового подхода помимо большей легкости при программировании — очень эффективный вариант обновления экрана curses. Это может быть не столь важно для экрана консоли, но становится существенным показателем, если программа выполняется через медленное сетевое соединение.
Программа с использованием curses выполнит множество вызовов функций вывода на логический экран, возможно, перемещая курсор по всему экрану для того, чтобы достичь нужной позиции вывода текста или рисования линий и рамок. На каком-то этапе пользователю потребуется увидеть весь этот вывод. Когда это произойдет (обычно во время вызова функции
refresh
Макет логического экрана — это символьный массив, упорядоченный по строкам и столбцам, с начальной позицией экрана (0, 0) в левом верхнем углу (рис. 6.1).
Рис. 6.1
Во всех функциях библиотеки curses применяются координаты со значением у (строки) перед значением х (столбцы). Каждая позиция хранит не только символ, расположенный в этом месте экрана, но и его атрибуты. Атрибуты, которые можно отобразить, зависят от физических характеристик терминала, но, как правило, они включают жирное начертание и подчеркивание символа. На консолях Linux вам также доступны негативное изображение и цвет, о которых речь пойдет далее в этой главе.
Поскольку библиотека curses нуждается в создании и удалении некоторых временных структур данных, все программы с использованием curses должны инициализировать библиотеку перед применением и затем разрешить ей восстановить первоначальные установки после ее применения. Делается это с помощью вызовов пары функций:
initscr
endwin
В этом примере вы напишите очень простую использующую curses программу screen1.c, чтобы показать эти и другие базовые функции в действии. Далее будут описаны их прототипы.
1. Вставьте заголовочный файл curses.h и в функцию
main
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
int main() {
initscr();
...
endwin();
exit(EXIT_SUCCESS);
}
2. Внутрь поместите код для перемещения курсора в точку (5, 15) на логическом экране, выведите приветствие "Hello World" и обновите реальный экран. В заключение примените вызов
sleep(2
move(5, 15);
printw("%s", "Hello World");
refresh();
sleep(2);
Пока программа выполняется, вы видите фразу "Hello World" в левом верхнем квадранте пустого экрана (рис. 6.2).
Рис. 6.2
Как это работает
Эта программа инициализирует библиотеку curses, перемещает курсор в заданную точку экрана и отображает некоторый текст. После короткой паузы она закрывает библиотеку и завершается.
Экран
Как: вы уже видели, все программы с использованием curses должны начинаться с вызова функции
initscr
endwin
<b>#include <curses.h></b>
<b>WINDOW *initscr(void);</b>
<b>int endwin(void);</b>
Функция
initscr
stdscr
Функция
endwin
clearok(stdscr, 1)
refresh
Вывод на экран
Для обновления экрана предоставляется несколько базовых функций.
<b>#include <curses.h></b>
<b>int addch(const chtype char_to_add);</b>
<b>int addchstr(chtype *const string_to_add);</b>
<b>int printw(char *format, ...);</b>
<b>int refresh(void);</b>
<b>int box(WINDOW *win_ptr, chtype vertical_char, chtype horizontal_char);</b>
<b>int insch(chtype char_to_insert);</b>
<b>int insertln(void);</b>
<b>int delch(void);</b>
<b>int deleteln(void);</b>
<b>int beep(void);</b>
<b>int flash(void);</b>