2009-09-11 3 views
2

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

+0

Что вы хотите, чтобы после того, как пользователь нажал клавишу Esc? – Glen

+0

Я планирую написать одну программу, которая вычисляет оптимальное решение одной конкретной проблемы. Он должен выводить наилучшее возможное решение, которое он нашел таким образом. Я не знаю хорошего алгоритма проблемы, поэтому мне нужно найти случайные числа, которые удовлетворяют этой проблеме. Поскольку это может занять месяцы, было бы неплохо прервать расчет, когда мне захочется остановить его. – Jaska

ответ

1

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

1

Самое простое решение нажатием 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

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

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