Решено: Проблема с обработкой сигналов

Модератор: Модераторы разделов

Аватара пользователя
kpcb
Сообщения: 13
ОС: openSuSE 10.2

Решено: Проблема с обработкой сигналов

Сообщение kpcb »

Есть программа на Си. В ней требуется установить обработчик сигнала, например SIGALRM. Такой вопрос: можно ли после выполнения обработчика этого сигнала продолжить выполнение программы с того места, где она была остановлена?
Вот так!
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Решено: Проблема с обработкой сигналов

Сообщение Red User »

kpcb

Так почти так и происходит. Правда, некоторые функции завершаются с ошибкой EINTR, если они прерваны сигналом. Так что надо просто проверять, что в errno. Если там EINTR, то перезапускать функцию ещё раз.
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Аватара пользователя
anonymous.ru
Сообщения: 614

Re: Решено: Проблема с обработкой сигналов

Сообщение anonymous.ru »

так и просиходит.
а если был прерван системный вызов, его можно автоматически перезапустить
у sigaction есть флаг SA_RESTART
:drinks:
Спасибо сказали:
Аватара пользователя
kpcb
Сообщения: 13
ОС: openSuSE 10.2

Re: Решено: Проблема с обработкой сигналов

Сообщение kpcb »

Спасибо. Флаг SA_RESTART помог. А то до этого после обработки сигнала программа постоянно вылетала с "Ошибкой сегментирования" (сигнал приходил в тот момент, когда от пользователя ожидался ввод строки).
Вот так!
Спасибо сказали: