Обработчик клавиатуры консоли Linux - PullRequest
2 голосов
/ 11 сентября 2009

Можно ли написать программу на C, которая работает в терминале XFCE, пока пользователь не нажмет клавишу Esc? Если да, то как?

Ответы [ 4 ]

1 голос
/ 16 сентября 2009

Я думаю, вы задаете не тот вопрос. Почему вы используете интерактивный терминал вообще для длительного процесса? Почему бы просто не работать как демон и регулярно регистрировать «лучшее» решение? Терминал предназначен для интерактивного использования человеком. Существуют лучшие способы работы с программным обеспечением, которое должно работать в течение «месяцев».

1 голос
/ 16 сентября 2009

Самое простое решение - нажать Ctrl-C в окне терминала. Ваше приложение будет немедленно остановлено или Вы можете обработать событие с помощью обработчика сигнала SIGINT.

#include <unistd.h>
#include <stdio.h>
#include <signal.h>

volatile int exit_loop;

void sig_hnd( void ){ exit_loop=1; }

int main(void){
  signal( SIGINT, (void (*)(int))sig_hnd );

  for( exit_loop=0; !exit_loop; ){
    puts( "do some work" );
    sleep(1);
  }

  puts( "\nend of work\n" );
}
1 голос
/ 11 сентября 2009

Я бы рекомендовал вам взглянуть на ncurses , API, который обычно используется для реализации такого типа чтения с клавиатуры в приложениях терминала / консоли. Не должно быть необходимости делать это в зависимости от платформы.

0 голосов
/ 16 сентября 2009

Переключите терминал в неканонический режим

...