как на Си реализовать обработчик нажатия клавиш (как на Си реализовать обработчик нажатия клавиш)

Модератор: Модераторы разделов

Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: как на Си реализовать обработчик нажатия клавиш

Сообщение Stauffenberg »

Bizdelnick писал(а):
20.07.2015 22:20
Stauffenberg писал(а):
20.07.2015 22:00
Таких, например, как Ctrl-C.

А ещё, например, каких?

Зависит от терминала. Например, Ctrl-Z, Ctrl-\ или Ctrl-D.

Интересней, конечно, использовать собственные сигналы SIGUSR1 и SIGUSR2.
Подробнне в LPI, глава 22.8.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: как на Си реализовать обработчик нажатия клавиш

Сообщение Bizdelnick »

Stauffenberg писал(а):
20.07.2015 22:33
Ctrl-Z

Это в винде?

Stauffenberg писал(а):
20.07.2015 22:33
Ctrl-\ или Ctrl-D

А это где?

Stauffenberg писал(а):
20.07.2015 22:33
Интересней, конечно, использовать собственные сигналы SIGUSR1 и SIGUSR2.

А их как с клавиатуры послать?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: как на Си реализовать обработчик нажатия клавиш

Сообщение Stauffenberg »

Bizdelnick писал(а):
20.07.2015 23:29
Stauffenberg писал(а):
20.07.2015 22:33
Ctrl-Z

Это в винде?

Stauffenberg писал(а):
20.07.2015 22:33
Ctrl-\ или Ctrl-D

А это где?

Все там же.

Bizdelnick писал(а):
20.07.2015 23:29
Stauffenberg писал(а):
20.07.2015 22:33
Интересней, конечно, использовать собственные сигналы SIGUSR1 и SIGUSR2.

А их как с клавиатуры послать?

Не получается через kill(1)?
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: как на Си реализовать обработчик нажатия клавиш

Сообщение Bizdelnick »

Stauffenberg писал(а):
20.07.2015 23:51
Не получается через kill(1)?

Получается и через kill(1), и через kill(2), но мы разве их обсуждаем в этой теме?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: как на Си реализовать обработчик нажатия клавиш

Сообщение Stauffenberg »

Bizdelnick писал(а):
20.07.2015 23:54
Stauffenberg писал(а):
20.07.2015 23:51
Не получается через kill(1)?

Получается и через kill(1), и через kill(2), но мы разве их обсуждаем в этой теме?

Хороший вопрос.

ТС просит подсказать нормальный материал на тему обработки нажатия клавиш на С. Для этого есть библиотеки, да, но ТС сам об этом пишет, так что повторяться или искать названия этих самых библиотек я смысла не вижу. К тому же можно посмотреть как подобное реализовано в том же, например, gnu screen.

Но внимание мое привлекло сообщение, где ТС написал о какой-то простой реализации обработки прерывания на ассемблере. Если бы не оно, я наверное так бы и прошел мимо (:
v4567 писал(а):
19.07.2015 19:36
На ассемблере это реализуется очень просто при помощи обработки прерываний. Кусок кода который должен обрабатывать прерывание от клавиатуры просто загрузился в озу и не выполняется, а выполняться начнёт когда сработает прерывание от клавиатуры.

Я могу представить подобный проект только где-нибудь в ВУЗе, да и то, только в качестве какого-то не нормального эксперимента... над студентами... организованной совместно с кафедрой психологии.

Я подумал, что если уж кусок ассемблерного кода, который перехватывает прерывания от клавиатуры, для ТС это "очень просто", то возможно его заинтересует механизм отправки собственных сигналов (или, возможно, какую-нибудь IPC). По крайней мере для их отправки не нужен ассемблер, все необходимое уже реализовано.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: как на Си реализовать обработчик нажатия клавиш

Сообщение eddy »

Боюсь, прерывания уже ядром перехватываются. Так разве что в досе можно навелосипедить...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
sabir
Сообщения: 66
ОС: OpenBSD

Re: как на Си реализовать обработчик нажатия клавиш

Сообщение sabir »

v4567 писал(а):
19.07.2015 19:36
Как программно реализовать (в linux) переключение в буквенно-цифровой (25x80) режим из графики и обратно

Запросто, если я правильно понял, что то типа этого:

Код: Выделить всё

int main()
{
    int ttyfd = open("/dev/tty3", O_RDWR | O_NOCTTY);
    if(ttyfd <= 0)
    {
        printf("failed to open active tty: %m\n");
        return -1;
    }

    // переводим терминал в графический режим
    ioctl(ttyfd, KDSETMODE, KD_GRAPHICS);

    while(!quit)
    {
        // тута хакаем whitehouse.gov
    }

    // переводим терминал обратно в текстовый режим
    ioctl(ttyfd, KDSETMODE, KD_TEXT);

    return 0;
}
Спасибо сказали:
Ответить