2012-06-13 2 views
0

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

Вот мой код:

while (1) { /* Main server loop - forever */ 
    build_select_list(); 
    timeout.tv_sec = 1; 
    timeout.tv_usec = 0; 

    readsocks = select(maxSock+1, &socks, (fd_set *) 0, (fd_set *) 0, &timeout); 

    if (readsocks < 0) { 
     perror("select"); 
     exit(EXIT_FAILURE); 
    } 
    if (readsocks == 0) { 
     printf("."); 
     fflush(stdout); 
    } else 
     read_socks(); 
} 

Я знаю, выберите detecs изменения в гнездах он контролирует и «отчет» об этом. Могу ли я обнаружить ввод клавиатуры от пользователя (для команд, таких как exit), используя select? Если нет, как мне это сделать?

+0

Это больше похоже на 'C', чем' C++' для меня. Настолько, что я собираюсь повторить это. Если вы действительно пишете 'C++', не стесняйтесь отката. – Paulpro

+0

Посмотрите на это http://stackoverflow.com/questions/2780051/linux-c-select-piping-echo-to-input-works-but-reading-from-keyboard-doesnt – mathematician1975

ответ

2

Вы можете использовать STDIN_FILENO (из unistd.h) или использовать fileno(stdin) (из stdio.h), чтобы получить файловый дескриптор ввода в консоль. Добавьте это в свой 'read' fdset, и select будет «делать правильную вещь», указывая, когда есть доступ к консоли. Оттуда просто прочитайте его, как и любой другой дескриптор файла.

Смежные вопросы