Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
#include <stdio.h>#include <term.h>#include <curses.h>#include <stdlib.h>int main() { setupterm("unlisted", fileno(stdout), (int *)0); printf("Done.n"); exit(0);}Результат выполнения этой программы в вашей системе может не быть точной копией приведенного далее, но его смысл будет вполне понятен. "
Done.setupterm$ <b>cc -о badterm badterm.с -lncurses</b>$ <b>./badterm</b>'unlisted': unknown terminal type.$Обратите внимание на строку компиляции в примере: в этой системе Linux мы используем реализацию ncurses библиотеки curses со стандартным заголовочным файлом, находящимся в стандартном каталоге. В таких системах вы можете просто включить файл curses.h и задать
-lncursesВ функции выбора пункта меню хорошо было бы иметь возможность очищать экран, перемещать курсор по экрану и записывать его положение на экране. После вызова функции
setupterm<b>#include <term.h></b><b>int tigetflag(char *capname);</b><b>int tigetnum(char *capname);</b><b>char *tigetstr(char *capname);</b>Функции
tigetflagtigetnumtigetstrtigetflagtigetnumtigetstrВы можете применять базу данных terminfo для определения размера экрана терминала, извлекая характеристики
colslines#include <stdio.h>#include <term.h>#include <curses.h>#include <stdlib.h>int main() { int nrows, ncolumns; setupterm(NULL, fileno(stdout), (int *)0); nrows = tigetnum("lines"); ncolumns = tigetnum("cols"); printf("This terminal has %d columns and %d rowsn", ncolumns, nrows); exit(0);}$ <b>echo $TERM</b>vt100$ <b>./sizeterm</b>This terminal has 80 columns and 24 rowsЕсли запустить эту программу в окне рабочей станции, вы получите результат, отражающий размер текущего окна:
$ <b>echo $TERM</b>xterm$ <b>./sizeterm</b>This terminal has 88 columns and 40 rows$Если применить функцию
tigetstrcupЕ[%p1%d;%p2%dHЭтой характеристике требуются два параметра: номер строки и номер столбца, в которые перемещается курсор. Обе координаты измеряются, начиная от нулевого значения в левом верхнем углу экрана.
Вы можете заменить параметры в характеристике реальными значениями с помощью функции
tparm<b>#include <term.h></b><b>char *tparm(char *cap, long p1, long p2, ..., long p9);</b>После формирования escape-последовательности с помощью
tparmprintf<b>#include <term.h></b><b>int putp(char *const str);</b><b>int tputs(char *const str, int affcnt, int (*putfunc)(int));</b>В случае успешного завершения функция
putpOKERRИтак, для перемещения в строку 5 и столбец 30 на экране можно применить блок программного кода, подобный приведенному далее:
char *cursor;char *esc_sequence;cursor = tigetstr("cup");esc_sequence = tparm(cursor, 5, 30);putp(esc_sequence);Функция
tputsstdoutputfuncaffcntputfuncputp(string)tputs (string, 1, putchar)tputs
