Форум русскоязычного сообщества Ubuntu


Автор Тема: Ubuntu Server: какое устройство предоставляет возможность читать ввод с клавы?  (Прочитано 370 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Phoenix666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
В общем цель это получить дескриптор устройства ввода.

нужно это для ожидания ввода через select, и соответственно чтения через read(хотя не обязательно, важно ожидание)

может есть у кого какие идеи?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
есть идея прочитать про основы ввода вывода в unix-подобных системах.
файловый дескриптор
0 - стандартный ввод
1 - стандартный вывод
2 - стандартный вывод ошибок
И, о боже, прямо в мануале про select именно об этом и написано. и даже пример приведен.

Оффлайн Phoenix666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
я тоже думал что все должно быть просто, однако:
#include <unistd.h>
#include <fcntl.h>
#include <sys/times.h>
#include <sys/time.h>
#include <sys/select.h>
#include <iostream>

fd_set in;

int main()
{
    FD_ZERO(&in);
    FD_SET(0,&in);
    std::cout<<"Start cycle."<<std::endl;
    while(true)
    {
        int t=select(0,&in,0,0,0);
        if(t>0)
        {
            char c;
            std::cout<<"Try to read char."<<std::endl;
            read(0,&c,1);
            std::cout<<c<<" readed."<<std::endl;
            if(c=='!')break;
        }
        else
        {
            std::cout<<"Error."<<std::endl;
            return 1;
        }
    }
}
по выводу вижу что из select так и не выходит...что делаю не так?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Обрати внимание на первый параметр select
Сравни с мануалом

Оффлайн Phoenix666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Цитировать
nfds is the highest-numbered file descriptor in any of the three sets, plus 1.
тогда понятна ошибка, спасибо огромное.

но пока тему не стоит закрывать думаю, так как конечная цель ожидание одновременно трех устройств, поэтома мало ли что :).

так, а как нить можно сконфигурировать stdin на то, чтоб он не ждал нажатие Enter?(примерно как getc)
---добавленно---
ну с последним разобрался, теперь отключить эхо, и вообще шик будет:).
« Последнее редактирование: 22 Январь 2012, 16:16:27 от Phoenix666 »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
да, можно
гугли по этому форуму
я приводил пример реализации getch

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля

 

Страница сгенерирована за 0.119 секунд. Запросов: 24.