#c #parameters #handler #signals
#c #параметры #обработчик #сигналы
Вопрос:
Я использую sigaction() для выполнения действия каждый раз, когда принимается SIGINT. Все учебные пособия, которые я видел, используют этот прототип в качестве обработчика сигналов
void sig_handler(int sig);
Есть ли способ каким-то образом заставить это принимать больше параметров, чтобы оно соответствовало моим потребностям? Так, например
void sig_handler(char* surname, int age);
Это мой код:
void sig_handler(int sig) {
printf("SIGINT(%d) receivedn", sig);
}
int main( ){
struct sigaction act;
act.sa_handler=sig_handler;
sigaction(SIGINT, amp;act, NULL);
while(1){};
return 0 ;
}
Ответ №1:
Не напрямую, но вы могли бы установить глобальную переменную, которая сообщает вам sig_handler()
, что делать.
int ACTION = 0;
void sig_handler(int sig) {
if (sig == SIGINT) {
switch (ACTION) {
case 0: other_function(char* surname, int age);
break;
// more cases
default:
;
}
} else if ( .... // more signals
}
}
int main( ){
struct sigaction act;
act.sa_handler=sig_handler;
sigaction(SIGINT, amp;act, NULL);
while(1){};
return 0 ;
}
Комментарии:
1. Я подумал об этом незадолго до того, как вы ответили, но вы все еще получаете мой голос: D
Ответ №2:
Вы не можете сделать это с сигналами. Как будут предоставлены и доставлены эти параметры? Сигнал — это просто заранее определенный числовой код, который заставляет процесс выполнять обработчик асинхронно, прерывая основной поток.
Однако вы можете использовать сокет Unix, канал или файл fifo для этого.