Книга: 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 при ошибке.
- 10.6.1. Обнажение проблемы
- 10.6.2. Наборы сигналов: sigset_t и связанные функции
- 10.6.3. Управление маской сигналов: sigprocmask() и др.
- 10.6.4. Перехват сигналов: sigaction()
- 10.6.5. Извлечение ожидающих сигналов: sigpending()
- 10.6.6. Создание возможности для прерывания функций: siginterrupt()
- 10.6.7. Передача сигналов: kill() и killpg()
- 10.6.8. Наша история до настоящего времени, эпизод II
- Создание файлов с блокировкой
- Создание свободно позиционируемых элементов
- Расширенные возможности указания пользовательских планов
- Возможности, планируемые к реализации в следующих версиях
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- Создание объектов Collection
- 7.4.2.4. Создание своего первого LiveCD
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- 7.4.2. Создание собственного LiveCD
- Создание пользователя и группы на рабочей станции
- Создание корня документа:
- Возможности SSH