Вам не нужно вызывать sigaction()
в каждой функции.Он устанавливает (глобальный) обработчик сигнала для данного сигнала, который остается обработчиком сигнала до тех пор, пока вы не измените его - другим вызовом sigaction()
для того же сигнала.Вы можете позвонить sigaction()
в main()
, но это также не обязательно.Вы можете вызывать его в других выбранных функциях.
Обратите внимание, что вам нужно вызывать sigaction()
один раз для каждого отдельного сигнала, который вы хотите обработать - или игнорировать.Часто полезно вызывать функцию, которая перебирает список сигналов, устанавливая соответствующий обработчик (и) для каждого сигнала.Слава Богу, вам не нужно делать это в каждой вызываемой функции!
В общем, избегайте смешивания вызовов для signal()
и sigaction()
в одной и той же программе.Если вы используете sigaction()
где-либо, используйте его везде.Однако, если вы настаиваете на том, чтобы быть извращенным, тогда вы можете использовать «sigaction()
или signal()
» в первом абзаце, где я упомянул только sigaction()
.
Обратите внимание, что вы можете использовать sigaction()
, чтобы найтикак обрабатывается сигнал без установки новой обработки сигнала.С помощью signal()
вы можете узнать (более или менее), как обрабатывается сигнал, но вы также должны установить действие.Еще одна причина предпочесть sigaction()
над signal()
.
Обратите внимание, что я предполагаю, что слово «объявить» в вопросе означает «звонок» в той или иной форме.Вы не объявляете sigaction()
ни в одной функции;Вы включаете <signal.h>
, чтобы объявить это.