Чтение онлайн

на главную

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

• Если вам требуется определенное количество энтропии, но в виде необработанных данных, вы можете извлечь небольшое множество при помощи одного из случайных методов (в зависимости от того, какое качество вы хотите гарантировать), а после этого расширить его одной из функций хеширования, такой как MD5 или SHA.

Исходный код драйвера случайных чисел,

drivers/char/random.с
, включает в себя важную информацию о технических деталях. Если вы планируете создание криптографической программы на основе данных, предоставляемых одним из описанных интерфейсов, настоятельно рекомендуем сначала изучить всю документацию.

Глава 20

Программирование виртуальных консолей

Интерфейс программирования виртуальных консолей Linux

основан на интерфейсе, который предоставляют некоторые версии UNIX. Это не полная реализация (хотя ее достаточно для совместимости исходного кода почти со всеми программами), но в ней также предусмотрено несколько важных дополнений.

Система Linux может переключать несколько сеансов работы с терминалом на одном экране и одной клавиатуре. Специальные клавиатурные последовательности позволяют пользователю определять, какой сеанс отображается в данный момент. Каждый из этих сеансов входа в систему имеет собственные установки клавиатуры (подобные тем, которые работают при нажатии или отключении клавиши <Caps Lock>), установки терминала (размеры, графический режим экрана, шрифты и так далее), компоненты устройств (такие как

/dev/tty1
,
/dev/vcs1
и
/dev/vcsa1
).

Клавиатурные и терминальные установки вместе называются виртуальными консолями (virtual console — VC). Это название объясняется их схожестью с виртуальной памятью, в которой система использует дисковое пространство для предоставления большего объема доступной памяти, чем физически установлено в компьютере.

Если вы не собираетесь управлять или обрабатывать VC, то можете пропустить эту главу. Работу с VC могут выполнять вместо вас несколько программных библиотек. При этом вам, возможно, захочется узнать, что они делают "за кулисами", чтобы вы могли работать с ними, а не против них.

Например,

svgalib
(библиотека для использования графики на нескольких типах графических контроллеров) содержит функции, которые производят большинство основных операций над виртуальными консолями. При этом требуется, чтобы вы избегали передачи случайных битов в графический контроллер в то время, когда он находится в текстовом режиме. Это может привести к искажению экрана. Из-за того, что документация по
svgalib
в настоящее время отсутствует, еще более важным для вас становится понимание того, что происходит внутри [149] .

149

Мы не рекомендуем применять библиотеку

svgalib
для графического программирования. Во многих книгах описывается программирование для X Window System, и система X предоставляет более разумный, безопасный и мобильный метод программирования графики. С другой стороны, если вы действительно собираетесь программировать для сервера X Window, то не сможете обойтись без кодирования VC. Таким образом, в любом случае данная глава окажется полезной.

Виртуальные консоли предлагают пользователям множество опций, однако многие пренебрегают ними и просто используют X Window System. Те пользователи, которые предпочитают применять VC, имеют перечисленные ниже возможности.

• Выбор отдельного шрифта для каждой VC.

• Выбор индивидуального размера терминала в каждой VC.

• Выбор соответствий ключа (подробнее об этом далее) для всех VC.

• Выбор различных клавиатурных кодировок для всех VC.

• Переключение виртуальных консолей при помощи особых нажатий клавиш, установленных пользователем.

Проект документации Linux (Linux Documentation Project — LDP) предлагает документацию, объясняющую, как использовать существующие программы, извлекая все преимущества описанных возможностей. Перед вами стоит другая цель — вы хотите программировать для VC, а не просто их использовать. В утилитах [150]

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

150

Прочтите man-страницы для утилит

loadkeys
,
dumpkeys
,
keytables
,
setfont
и
mapscrn
.

20.1. Начало работы

Ниже приведен список тех действий, которые вы можете производить над VC. Некоторые из них относятся только к отдельной виртуальной консоли (как правило, к той, которая активна в данный момент); некоторые используются для всех работающих VC.

• Найти текущую VC.

• Инициировать переключение VC.

• Отклонить или принять переключение VC.

• Полностью запретить переключение VC.

• Найти неиспользуемую VC.

• Динамически назначить или освободить память VC в ядре.

• Генерировать простые звуки.

Во всех случаях необходима одна и та же подготовительная работа. Вы будете применять команды

ioctl
на
/dev/tty
— поэтому нужно начать с включения заголовочных файлов, которые определяют аргументы
ioctl
.

#include <signal.h>

#include <sys/ioctl.h>

#include <sys/vt.h>

#include <sys/kd.h>

#include <sys/param.h>

После этого нужно открыть

/dev/tty
.

if ((fd = open("/dev/tty", O_RDWR)) < 0) {

 perror("myapp: не удается открыть /dev/tty");

 exit(1);

}

Если вы обнаруживаете, что не можете открыть

/dev/tty
, то, возможно, у вас проблемы с полномочиями: устройство
/dev/tty
должно быть доступно для чтения и записи всем без исключения.

Обратите внимание на то, что в качестве дополнения к

ioctl.h
существуют два главных заголовочных файла, в которых определены вызовы
ioctl
, обрабатывающие VC. В файле
vt.h
определяются вызовы, начинающиеся с букв
VT
, и реализуется управление виртуальным терминалом (экраном), как частью виртуальных консолей. В файле
kd.h
определены вызовы, которые начинаются с
KD
и обрабатывают клавиатуру и шрифты. Почти все содержимое
kd.h
можно проигнорировать, поскольку эти функциональные возможности прекрасно инкапсулируются в утилитах. Однако оно окажется весьма полезным при выдаче звуковых сигналов консолью на управляемых частотах.

Данные основные заголовочные файлы также определяют структуры, которые используются с

ioctl
.

Структура

vt_mode
применяется для поиска и изменения текущей VC:

struct vt_mode {

 char mode;

 char waitv;

 short relsig;

 short acqsig;

 short frsig;

};

• Переменная

mode
принимает одно из двух значений:
VT_AUTO
(вынуждает ядро автоматически переключать консоли во время нажатия клавиш или при получении запроса от программы на переключение VC) или
VT_PROCESS
(предписывает ядру запрашивать подтверждение прежде чем переключать консоли).

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6