Книга: Linux программирование в примерах

10.6.6. Создание возможности для прерывания функций: siginterrupt()

10.6.6. Создание возможности для прерывания функций: siginterrupt()

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

#include <signal.h> /* XSI */
int siginterrupt(int sig, int flag);

В соответствии со стандартом POSIX поведение siginterrupt() эквивалентно следующему коду:

int siginterrupt(int sig, int flag) {
 int ret;
 struct sigaction act;
 (void)sigaction(sig, NULL, &act); /* Получить старые установки */
 if (flag) /* Если flag равен true... */
  act.sa_flags &= ~SA_RESTART; /* Запретить повторный запуск */
 else /* В противном случае... */
  act.sa_flags |= SA_RESTART; /* Разрешить повторный запуск */
 ret = sigaction(sig, &act, NULL);
  /* Поместить новые установки на место */
 return ret; /* Вернуть результат */
}

В случае успеха возвращаемое значение равно 0 и -1 при ошибке.

Оглавление книги


Генерация: 1.478. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз