2017-02-08 7 views
0

Итак, я работаю над этим кодом для класса, и у меня мало опыта работы с обработчиками сигналов. У меня 95% моего кода сделано, однако я борюсь с этим битом.Установка обработчиков сигналов для переменных, которые определены в файле заголовка в C

Это то, о чем просит профессор по этому заданию.

Тогда основной() необходимо установить обработчик 4 сигнала:
Обработчик TIME_OVER_SIGNAL объявляет, что время и устанавливает shouldRun 0.
Обработчик WIN_SIGNAL объявляет о том, что пользователь выиграл и sets shouldRun to 0.
Обработчик для CORRECT_SIGNAL сообщает, что пользователь получил свое последнее предположение правильно.
Обработчик для INCORRECT_SIGNAL сообщает, что пользователь получил последнее предположение неправильно и должен начать с самого начала.
ПРИМЕЧАНИЕ. Возможно, вы можете сделать один и тот же обработчик как CORRECT_SIGNAL, так и INCORRECT_SIGNAL.

Мне не удалось найти какие-либо примеры в Интернете, похожие на это, чтобы направить меня в правильном направлении, что делать.

Это то, что я в основном получил из объяснения, и я знаю, что это, вероятно, не соответствует значению ... Как мне это сделать, чтобы они выдавали конкретное сообщение, как его спрашивали? Единственными примерами, которые я могу найти в Интернете, являются общие аварийные сигналы, sigChld или возможность Ctrl^C из запущенной программы.

void timeOverSignalHandler(int sigINT) 
{ 
     printf("Oh no! The time is up!"); 
     shouldRun = 0; 
} 

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

Если кто-нибудь может быть любезным, чтобы вести меня в правильном направлении с этим, я был бы очень признателен за вашу помощь! Любой пример, который был бы подобен этому, был бы замечательным, когда обработчик использовался для вывода определенной фразы пользователю. Не обязательно, чтобы эти конкретные обработчики, которые мне нужно сделать для задания. Это программа на С!

+1

Is It 'c' или' 'C++? Пожалуйста, выберите один. В чем вопрос? –

+0

Это программа на С, мои извинения. –

+0

Вопрос в том, как я могу установить эти обработчики сигналов, которые необходимо установить. Все, что я могу найти в Интернете, поскольку примеры являются стандартными обработчиками сигналов для сигналов тревоги или Ctrl^C'ing из работающей программы. Ничего, что печатает конкретный результат, основанный на данном обстоятельстве, подобном этому. –

ответ

0

Не совсем уверен, что ваша цель, но сигналы в соответствии с GNU:

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

Если у вас есть 64-битных ОС, вы должны быть в состоянии использовать SIGNUM's от 1 до 64, обратите внимание на некоторые из этого включают уже успело сигналы как SIGTERM. Следующий код управляет и поднимает сигнал 10 (SIGUSR1), что я определил с одним из ваших идентификаторов:

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

#define TIME_OVER_SIGNAL 28 


static void catInteractive attention sch_function(int signo) { 
    puts("Signal caught."); 
} 

int main(void) { 
    if (signal(TIME_OVER_SIGNAL, catch_function) == SIG_ERR) { 
     fputs("An error occurred while setting a signal handler.\n", stderr); 
     return EXIT_FAILURE; 
    } 
    puts("Raising the interactive attention signal."); 
    if (raise(TIME_OVER_SIGNAL) != 0) { 
     fputs("Error raising the signal.\n", stderr); 
     return EXIT_FAILURE; 
    } 
    puts("Exiting."); 
    return EXIT_SUCCESS; 
} 

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

  • Нет связанных вопросов^_^