Книга: Разработка приложений в среде Linux. Второе издание
20.1. Начало работы
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
(предписывает ядру запрашивать подтверждение прежде чем переключать консоли).
• Переменная waitv
не используется, однако для совместимости с SVR4 ей нужно присвоить значение 1
.
• Переменная relsig
именует сигнал, который должно сгенерировать ядро для передачи в процесс запроса на освобождение VC.
• Переменная acqsig
именует сигнал, который должно сгенерировать ядро для извещения процесса о том, что он получает VC.
• Переменная frsig
не используется, однако для совместимости с SVR4 ей нужно присвоить значение 0
.
struct vt_stat {
unsigned short v_active;
unsigned short v_signal;
unsigned short v_state;
};
• Переменная v_active
хранит количество VC, активных в данный момент.
• Переменная v_signal
не реализована.
• Переменная v_state
хранит битовую маску, сообщающую, какие из первых 16 VC открыты в данный момент (в системе Linux поддерживается до 63 VC). В системе Linux редко появляется смысл консультироваться с данной маской, поскольку она недостаточно велика, чтобы содержать полную информацию. В большинстве случаев вам понадобится знать только номера ряда открытых консолей, которые вы можете извлечь с помощью функции VT_OPENQRY
(рассматривается далее в этой главе).
- 5.2. Основные приемы работы, элементы текстового редактора
- 8. Целина, словотворчество и начало научной работы на кафедре
- Глава 1 Начало работы
- Начало работы руководителя проекта
- Начало нового приложения для работы с коллекцией компакт-дисков
- Начало работы с интерактивной доской
- Начало работы
- Часть I Начало работы
- Начало работы с новым клиентом
- 2.4. Начало работы и ее завершение
- 13.2.1. Начало работы
- 4.2. Начало и завершение работы