2017-01-10 7 views
2

Итак, я использовал функцию signal() несколько раз до сих пор, хотя я не знал о том, что на самом деле означает объявление этой функции. я узнал, что эта функция возвращает указатель на функцию:Какова цель указателя функции, возвращаемого функцией signal()?

void (*signal(int sig, void (*func)(int)))(int) 

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

+2

Возможно, было бы полезно, если вы захотите восстановить предыдущий обработчик позже. Это также возможный способ проверить, что сигнал в настоящее время игнорируется. –

+2

, и вы также можете реализовать * каскадные обработчики сигналов * – tofro

ответ

3

Это общий шаблон для установки глобальных значений. Теперь возвращается старое значение (в данном случае указатель на обработчик), как следствие установки нового.

Это позволяет сделать изменение временным. Таким образом, можно восстановить встроенный обработчик, не заставляя реализацию подвергать эту функцию вам по имени.


Хотя в данном случае API делает разоблачить способ для вас, чтобы установить значение по умолчанию, через SIG_DFL макросъемки.

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

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