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

 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 (рассматривается далее в этой главе).

<p>20.2. Выдача звукового сигнала</p>

Заставить консоль генерировать звуковой сигнал в течение определенного периода времени на указанной частоте совсем не сложное дело. Для этого существуют два способа. Первый состоит во включении или отключении постоянной тональной посылки. Команда KIOCSOUND отключает звук, если ее аргумент равен нулю. В противном случае она устанавливает частоту звука (причем довольно необычным способом, как показано в следующем коде).

void turn_tone_on(int fd, int hertz) {

 ioctl(fd, KIOCSOUND, 1193180/hertz)

}

void turn_tone_off(int fd) {

 ioctl(fd, KIOCSOUND, 0)

}

Вторым вариантом для выдачи консолью звукового сигнала является применение команды управления вводом-выводом KDMKTONE. Она включает тональную посылку на время, указанное в тиках системных часов (jiffy). К сожалению, время одного тика в различных архитектурах разное. Макрос HZ, определенный sys/param.h, позволяет получить количество тиков в секунду. Функция tone(), показанная ниже, демонстрирует, как извлекать количество тиков в сотых долях секунды и значение макроса HZ[151].

#include

void tone(int fd, int hertz, int hundredths) {

 unsigned int ticks = hundredths * HZ / 100;

 /* ticks & 0xffff не будет работать, если ticks — 0xf0000;

  * вместо этого нужно округлить до наибольшего допустимого значения */

 if (ticks > 0xffff) ticks = 0xffff;

 /* еще одна ошибка округления */

 if (hundredths && ticks == 0) ticks = 1;

 ioctl(fd, KDMKTONE, (ticks << 16 | (1193180/hertz)));

}

<p>20.3. Определение, является ли терминал виртуальной консолью</p>

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

struct vt_mode vtmode;

fd = open("/dev/tty", O_RDWR);

retval = ioctl (fd, VT_GETMODE, &vtmode);

if (retval < 0) {

 /* Данный терминал не является VC; выполните соответствующие действия */

}

<p>20.4. Поиск текущей виртуальной консоли</p>

Для извлечения номера текущей VC применяется команда управления вводом-выводом VT_GETSTATE, которая принимает указатель на структуру struct vt_stat и возвращает номер текущей консоли в ее элементе v_active.

unsigned short get_current_vc(int fd) {

 struct vt_stat vs;

 ioctl(fd, VT_GETSTATE, &vs);

 return(vs.v_active);

}

Для локализации соответствующего элемента устройства для текущей VC служит следующая функция:

sprintf(ttyname, "/dev/tty%d", get_current_vc(fd));

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных