The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"прога-демон которая запускает программы при нажатии на опред..."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"прога-демон которая запускает программы при нажатии на опред..."
Сообщение от sector119 emailИскать по авторуВ закладки on 10-Дек-02, 00:44  (MSK)
subj
как это реализовать? намеки :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: прога-демон которая запускает программы при нажатии на о..."
Сообщение от pLYM0rph emailИскать по авторуВ закладки on 10-Дек-02, 08:46  (MSK)
>subj
>как это реализовать? намеки :)
man ( fork & ( execl | execv ) & select )
Мониторишь стандартный ввод ( select() ),
как только нажата нужная комбинация клавишь делаешь fork(), execl...
А детали реализации зависят от конкретной версии UNIX,
хотя если придерживаться POSIX, XSI & etc., то можно написать
вполне портируемый код...
Совет: для начала поискать в gogle аналогичные проги...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: прога-демон которая запускает программы при нажатии на о..."
Сообщение от sector119 emailИскать по авторуВ закладки on 10-Дек-02, 09:01  (MSK)
>Мониторишь стандартный ввод ( select() ),

вот собственно сам мониторинг меня и интересует! как его реализовать? что-бы программа висела в бекграунде и слушала клавиатуру!? как такое сделать?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: прога-демон которая запускает программы при нажатии на о..."
Сообщение от pLYM0rph Искать по авторуВ закладки on 10-Дек-02, 12:13  (MSK)
>>Мониторишь стандартный ввод ( select() ),
>
>вот собственно сам мониторинг меня и интересует! как его реализовать? что-бы программа
>висела в бекграунде и слушала клавиатуру!? как такое сделать?
fd_set fdset;
FD_ZERO(&fdset);
FD_SET(0, &fdset);
while (select(1, NULL, &fdset, NULL, NULL))
{ if (FD_ISSET(0, &fdset) { read(0, ...); ... } }
Это как бы общая идея, конечно же значение fdset желательно сохранить
перед вызовом select...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: прога-демон которая запускает программы при нажатии на о..."
Сообщение от joker Искать по авторуВ закладки on 10-Дек-02, 13:07  (MSK)
>висела в бекграунде и слушала клавиатуру!? как такое сделать?
программа под UNIX не может одновременно висеть в бекграунде и читать stdin, потому что по определению прога-демон - это та, которая не имеет управляющего терминала, а следовательно не может читать stdin etc etc :))

такое можно реализовать ИМХО только написав обработчик прерывания от клавиатуры и заменив им стандартный.
Но такими вещами под UNIX я не занимался поэтому посоветовать что-то толковое не могу.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: прога-демон которая запускает программы при нажатии на о..."
Сообщение от vnp emailИскать по авторуВ закладки on 10-Дек-02, 23:00  (MSK)
>>висела в бекграунде и слушала клавиатуру!? как такое сделать?
>программа под UNIX не может одновременно висеть в бекграунде и читать
>stdin,
>потому что по определению прога-демон - это та, которая не имеет
>управляющего терминала, а следовательно не может читать stdin etc
>etc :))

А? Между stdin, управляющим терминалом и клавиатурой нет ничего общего.

>такое можно реализовать ИМХО только написав обработчик прерывания от
>клавиатуры и заменив им стандартный.

Почти правильно. Цепляться нужно к драйверу. Точнее, делать свой
драйвер, и ставить его между клавиатурой и "настоящим" драйвером.
Подробности у Рубини.

Если все это делается для X, то можно обойтись более мирными средствами.

>Но такими вещами под UNIX я не занимался поэтому посоветовать что-то
>толковое не могу.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: прога-демон которая запускает программы при нажатии на о..."
Сообщение от XMan Искать по авторуВ закладки on 10-Дек-02, 23:22  (MSK)
> Между stdin, управляющим терминалом и клавиатурой нет ничего общего
Есть - кусок системы, который их связывает до кучки :)
Но не в этом дело.

При наличии /dev/console можно попробовать читать из него. Но:
1. будет работать только на локальной машине;
2. нужно сделать чтение без удаления, дабы все остальные получили клавиатуру. При этом, читать нужно в соответствии с архитектурой машины (для x86 - 1 байт, если он 0, то еще один байт) и удалять символы только при обнаружении своих комбинаций

Рекомендую код перехвата испытывать под X и не в виде демона, ибо в текстовой консоли при неправильной реализации ты можешь завесить клавиатурный ввод - придется или терминалом заходить и прибивать процесс или пользовать power/reset.

PS. Кому интересно поиздеваться над работающими непосредственно за машиной - заходим по сети и говорим "cat </dev/console &" :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: прога-демон которая запускает программы при нажатии на о..."
Сообщение от Soldier Искать по авторуВ закладки on 13-Дек-02, 13:36  (MSK)
>subj
>как это реализовать? намеки :)
В свое время я это проделал используя стандартные средства Linux(если не в X-ах) так:
Допустим мы хотим сделать "гадость" при нажатии ctrl-alt-2:
Берете любой *.kmap файл (из /usr/share/keymaps/i386/qwerty/...  например). (Если надо сделайте gunzip) сохраняете его где-нибудь и пишите туда строку:

control alt     keycode   3 = KeyboardSignal

Естественно надо проверить чтобы комбинация ctrl-alt-2 не была занята (обычно она свободна).

Далее в inittab пишем:
kb::kbrequest:/some/our/programm
(Обычно в inittab уже есть строка типа:
kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work.")

Затем перезапустить init (init q  или послать SIGHUP) и загрузить через loadkeys ваш keymap файл и все. По крайней мере мне этого вполне хватило.

В вашем случае эта прога может заслать какому-нибудь демону какой-нибудь сигнал, а тот уже сделает свое "черное дело". Тоже можно сделать практически с любой комбинацией клавиш.

Правда из по X-ов это не работает.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру