The OpenNET Project / Index page

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

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

"PERL: Как контролировать нажатие без ожидания ввода?"  
Сообщение от slw email(??) on 12-Фев-08, 18:11 
Добрый день!

Подскажите, как реализовать программу, которая бы не ожидая ввода в нужный момент знала о нажатии на клавиатуру.
Поясню. Вот, например:

my $k;
while (1) {
$k=<STDIN>;
chomp($k);
if ($k eq "q") {exit};
# А тут нужно вставить код, который бы выполнялся постоянно, чтобы STDIN не задерживало цикл.
};

В этом примере, когда дело дойдёт до STDIN произойдет ожидание ввода. И пока я не введу что-либо, да ещё и плюс ENTER - ничего дальше не сдвинется. А мне нужно, чтобы цикл вращался и не затыкался на STDIN, но когда будет нажата клавиша, чтобы я знал об этом.
Как это реализовать?

Заранее благодарен,
Вячеслав

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "PERL: Как контролировать нажатие без ожидания ввода?"  
Сообщение от AMDmi3 (??) on 12-Фев-08, 20:01 
>Подскажите, как реализовать программу, которая бы не ожидая ввода в нужный момент
>знала о нажатии на клавиатуру.

Смотреть в сторону Curses или IO::Tty

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "PERL: Как контролировать нажатие без ожидания ввода?"  
Сообщение от slw email(??) on 12-Фев-08, 23:36 
>>Подскажите, как реализовать программу, которая бы не ожидая ввода в нужный момент
>>знала о нажатии на клавиатуру.
>
>Смотреть в сторону Curses или IO::Tty

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

sub getchar {
system "stty", "-icanon", "min", "0";
my $key = <STDIN>;
system "stty", "icanon", "eol", "^@"; # ASCII NUL
return ($key);
};

Пользуйтесь на здоровье.
Всем спасибо!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "PERL: Как контролировать нажатие без ожидания ввода?"  
Сообщение от sn (??) on 13-Фев-08, 09:17 
>[оверквотинг удален]
>
>sub getchar {
>system "stty", "-icanon", "min", "0";
>my $key = <STDIN>;
>system "stty", "icanon", "eol", "^@"; # ASCII NUL
>return ($key);
>};
>
>Пользуйтесь на здоровье.
>Всем спасибо!

Молодец. Можешь еще в сторону Term::ReadKey посмотреть.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "PERL: Как контролировать нажатие без ожидания ввода?"  
Сообщение от anonymous (??) on 13-Фев-08, 23:07 
>Молодец. Можешь еще в сторону Term::ReadKey посмотреть.

Ну и конечно же обычный select() тоже поможет.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "PERL: Как контролировать нажатие без ожидания ввода?"  
Сообщение от from_mars on 14-Фев-08, 03:33 
>Ну и конечно же обычный select() тоже поможет.

да, точно, тоже хотел посоветовать
я так делал в одном простеньком клиенте

vec($rb, fileno(STDIN), 1) = 1;
vec($rb, fileno(CD), 1) = 1; # сокет
if (select($rb, undef, undef, 1) > 0)
{
    if (vec($rb, fileno(STDIN), 1))
    {
        $data = <STDIN>;
        warn("client: sending data to server\n");
        send(CD, $data, 0) or warn("client: sending data fucked up\n");
    }
    if (vec($rb, fileno(CD), 1))
    {
        $data = <CD>;
        warn("recivied:\n$data");
    }
}


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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