Почему я не могу вызвать функцию (обработчик сигнала), возвращенную сигналом функции?

Как уже упоминалось в парах других, нет способа стилизовать родительский элемент элемента, используя только CSS, но следующее работает с jQuery :

$("a.active").parents('li').css("property", "value");

1
задан Rick 28 March 2019 в 04:46
поделиться

2 ответа

В следующей строке:

f1 = signal(SIGINT, signal_handler);

f1 назначен предыдущий обработчик сигнала (который не является signal_handler в коде), который может не быть указателем на функция, которую вы можете вызвать с аргументом int.

Для достижения эффекта вам нужно определить второй обработчик сигнала и назначить его на f1 после указанной выше строки.

Примерно так:

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

void signal_handler2(int signal)
{
    printf("hahahah2222\n");
}

void signal_handler(int signal)
{
    printf("hahahah\n");
}

int main(void)
{
    void (*f1)(int);
    f1 = signal(SIGINT, signal_handler);
    f1 = signal(SIGINT, signal_handler2);
    f1(3);  //Success
    signal_handler2(3); //OK
    raise(SIGINT);    
}

Вывод:

hahahah
hahahah2222
hahahah2222

См. Live Демо

0
ответ дан P.W 28 March 2019 в 04:46
поделиться

Существует как минимум 3 значения, которые может возвращать signal(), которые не являются указателями на реальные функции:

  1. SIG_DFL - обычно ((void (*)(int))0)
  2. SIG_IGN - обычно ((void (*)(int))1)
  3. SIG_ERR - обычно ((void (*)(int))-1)

При запуске программы сигналы находятся в режиме SIG_IGN или SIG_DFL; впоследствии вы можете установить для них другое значение.

Когда вы вызываете f1 = signal(SIGINT, signal_handler);, вы получаете один из SIG_DFL и SIG_IGN - и ни один из них не является указателем на вызываемую функцию (даже если их тип является указателем на функцию правильного типа).

0
ответ дан Jonathan Leffler 28 March 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: