Решено: Проблема с обработкой сигналов
Модератор: Модераторы разделов
-
kpcb
- Сообщения: 13
- ОС: openSuSE 10.2
Решено: Проблема с обработкой сигналов
Есть программа на Си. В ней требуется установить обработчик сигнала, например SIGALRM. Такой вопрос: можно ли после выполнения обработчика этого сигнала продолжить выполнение программы с того места, где она была остановлена?
Вот так!
-
Red User
- Сообщения: 229
- ОС: Debian
Re: Решено: Проблема с обработкой сигналов
kpcb
Так почти так и происходит. Правда, некоторые функции завершаются с ошибкой EINTR, если они прерваны сигналом. Так что надо просто проверять, что в errno. Если там EINTR, то перезапускать функцию ещё раз.
Так почти так и происходит. Правда, некоторые функции завершаются с ошибкой EINTR, если они прерваны сигналом. Так что надо просто проверять, что в errno. Если там EINTR, то перезапускать функцию ещё раз.
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
-
anonymous.ru
- Сообщения: 614
Re: Решено: Проблема с обработкой сигналов
так и просиходит.
а если был прерван системный вызов, его можно автоматически перезапустить
у sigaction есть флаг SA_RESTART
а если был прерван системный вызов, его можно автоматически перезапустить
у sigaction есть флаг SA_RESTART
-
kpcb
- Сообщения: 13
- ОС: openSuSE 10.2
Re: Решено: Проблема с обработкой сигналов
Спасибо. Флаг SA_RESTART помог. А то до этого после обработки сигнала программа постоянно вылетала с "Ошибкой сегментирования" (сигнал приходил в тот момент, когда от пользователя ожидался ввод строки).
Вот так!