Использование sigaction ()

Мне нужно отправить два сигнала процессу, SIGUSR1 и SIGUSR2 , чтобы изменить конкретную логическую переменную в программе ( SIGUSR1 устанавливает значение true , SIGUSR2 устанавливает значение false ). Поэтому я написал функцию signalHandler () для управления поведением SIGUSR1 или SIGUSR2 . Проблема заключается в следующем: как настроить sigaction () для обработки этой конкретной задачи? Я провел много времени в Google, я везде читал, что мне следует использовать sigaction () вместо устаревшего signal () . На странице руководства я нашел это

int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);

в signum. Мне нужно указать тип сигнала, который я хочу обработать, затем у меня есть параметр struct sigaction:

  struct sigaction {
       void     (*sa_handler)(int);
       void     (*sa_sigaction)(int, siginfo_t *, void *);
       sigset_t   sa_mask;
       int        sa_flags;
       void     (*sa_restorer)(void);
   };

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

И, наконец, какова польза от: struct sigaction * oldact ?

6
задан Robb1 21 January 2017 в 19:05
поделиться