-->

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

На нашем литературном портале можно бесплатно читать книгу Основы программирования в Linux, Мэтью Нейл-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Основы программирования в Linux
Название: Основы программирования в Linux
Дата добавления: 16 январь 2020
Количество просмотров: 669
Читать онлайн

Основы программирования в Linux читать книгу онлайн

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

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 86 87 88 89 90 91 92 93 94 ... 324 ВПЕРЕД
Перейти на страницу:

 el1=E[1K$<3>, enacs=E(BE)0, home=E[H, ht=t,

 hts=EH, ind=n, ka1=EOq, ka3=EOs, kb2=EOr, kbs=b,

 kc1=EOp, kc3=EOn, kcub1=EOD, kcud1=EOB,

 kcuf1=EOC, kcuu1=EOA, kent=EOM, kf0=EOy, kf1=EOP,

 kf10=EOx, kf2=EOQ, kf3=EOR, kf4=EOS, kf5=EOt,

 kf6=EOu, kf7=EOv, kf8=EOl, kf9=EOw, rc=E8,

 rev=E[7m$<2>, ri=EM$<5>, rmacs=^O, rmkx=E[?11E>,

 rmso=E[m$<2>, rmul=E[m$<2>,

 rs2=E>E[?31E[?41E[?51E[?7hE[?8h, sc=E7,

 sgr=E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e^O%;,

 sgr0=E[m^0$<2>, smacs=^N, smkx=E[?1hE=,

 smso=E[1;7m$<2>; smul=E[4m$<2>, tbc=E[3g,

Каждое определение в

terminfo
состоит из трех типов элементов. Каждый элемент называется
capname
(имя характеристики) и определяет характеристику терминала.

Булевы или логические характеристики просто обозначают наличие или отсутствие поддержки терминалом конкретного свойства. Например, булева характеристика

xon
присутствует, если терминал поддерживает управление потоком
XON/XOFF
.

Числовые характеристики определяют размеры или объемы, например

lines
— это количество строк на экране, a
cols
— количество столбцов. Число отделяется от имени характеристики символом
#
. Для описания терминала с 80 столбцами и 24 строками следует написать
cols#80, lines#24
.

Строковые характеристики немного сложнее. Они применяются для двух разных типов характеристик: определения строк вывода, необходимых для доступа к функциям терминала, и определения строк ввода, которые будут получены, когда пользователь нажмет определенные клавиши, обычно функциональные или специальные клавиши на цифровой клавиатуре. Некоторые строковые параметры очень просты, например

el
, что означает "стереть до конца строки". Для того чтобы сделать это на терминале VT100, потребуется escape-последовательность
Esc, [, K
. В исходном формате terminfo это записывается как
еl=Е[K
.

Специальные клавиши определены аналогичным образом. Например, функциональная клавиша <F1> на терминале VT100 посылает последовательность

Esc, O, P
, которая определяется как
kf1=EOP
.

Все несколько усложняется, если escape-последовательности требуются какие-либо параметры. Большинство терминалов могут перемещать курсор в заданные строку и столбец. Ясно, что неразумно хранить отдельную характеристику для каждой точки экрана, в которую можно переместить курсор, поэтому применяется общая строковая характеристика с параметрами, определяющими значения, которые вставляются при использовании характеристики. Например, терминал VT100 использует последовательность

Esc, [, &lt;row&gt;, &lt;col&gt;, H
для перемещения курсора в заданную позицию. В исходном формате terminfo это записывается довольно устрашающе:
cup=E[%i%p1%d;%p2%dH$&lt;5&gt;
.

Эта строка означает следующее:

□ 

E
— послать escape-символ;

□ 

[
— послать символ
[
;

□ 

%i
— дать приращение аргументам;

□ 

%p1
— поместить первый аргумент в стек;

□ 

%d
— вывести число из стека как десятичное;

□ 

;
— послать символ
;
;

□ 

%р2
— поместить второй аргумент в стек;

□ 

%d
— вывести число из стека как десятичное;

□ 

H
—послать символ
H
.

Данная запись кажется сложной, но позволяет задавать параметры в строгом порядке, не зависящем от порядка, в котором терминал ожидает их появления в финальной escape-последовательности. Приращение аргументов

%i
необходимо, поскольку стандартная адресация курсора задается, начиная от верхнего левого угла экрана (0, 0), а терминал VT100 обозначает начальную позицию курсора как (1, 1). Заключительные символы
$&lt;5&gt;
означают, что для обработки терминалом перемещения курсора требуется задержка, эквивалентная времени вывода пяти символов.

Примечание

Мы могли бы описывать огромное множество характеристик, но, к счастью, в основном системы UNIX и Linux приходят с большинством предопределенных терминалов. Если нужно добавить новую модель терминала, вы можете найти полный список характеристик на странице интерактивного справочного руководства, посвященной terminfo. Лучше всего начать с поиска включенного в базу данных терминала, похожего на ваш новый, и затем создания описания новой модели как вариации существующего, т. е. осуществить последовательный просмотр характеристик, одну за другой, и исправление нуждающихся в корректировке.

Применение характеристик terminfo

Теперь, когда вы знаете, как определить характеристики терминала, нужно научиться обращаться к ним. Когда используется terminfo, прежде всего вам нужно задать тип терминала, вызвав функцию

setupterm
. Она инициализирует структуру
TERMINAL
для текущего типа терминала. После этого вы сможете запрашивать характеристики терминала и применять его функциональные возможности. Делается это с помощью вызова
setupterm
, подобного приведенному далее:

<b>#include &lt;term.h&gt;</b>

<b>int setupterm(char *term, int fd, int *errret);</b>

Библиотечная функция

setupterm
задает текущий тип терминала в соответствии с заданным параметром
term
. Если
term
— пустой указатель, применяется переменная окружения
TERM
. Открытый дескриптор файла, предназначенный для записи на терминал, должен передаваться в параметре
fd
. Результат функции хранится в целой переменной, на которую указывает
errret
, если это не пустой указатель. Могут быть записаны следующие значения:

□ -1 — нет базы данных terminfo;

□ 0 — нет совпадающего элемента в базе данных terminfo;

□ 1 — успешное завершение.

Функция

setupterm
возвращает константу
OK
в случае успешного завершения и
ERR
в случае сбоя. Если на параметр
errret
установлен как пустой указатель,
setupterm
выведет диагностическое сообщение и завершит программу в случае своего аварийного завершения, как в следующем примере:

1 ... 86 87 88 89 90 91 92 93 94 ... 324 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название