По-моему, любые прерывания обрабатываются сначала кодом операционной системы, а потом она уже может вызвать дополнительный обработчик заданный приложением.
#include <signal.h>
#include <iostream>
using namespace std;
char enter[10];
void my(int snum) // ф-ия обработчик сигнала
{ // сигнал получен через структуру sigaction act
cout << "поймал сигнал N:" << snum << endl;
cout << "продолжать? y/n" << endl;
gets(enter);
if ( (enter[0]=='y') || (enter[0]=='Y') )
system("./filter"); // повторный вызов приложения
else
system("/bin/bash"); // выход из приложения
}
...
}
Не понял -- зачем запускать ещё одну копию програииы, причём через system ?
А system("/bin/bash"); -- это, по-моему, вообще не выход из программы, а запуск ещё одного интерпретатора. Почему не exit(CODE);?
MiK13
Я хотел показать, что сообщ. - segmetation fault не будет. Если вы сделаете exit(), _exit, _Exit() - то вы выйдете из приложения (см. начало темы - крах приложения). Полностью корректного обработчика SIGSEGV ... с возвратом в главное меню приложения, я пока не нашел. Но он существует. Нужен рабочий код, иллюстрирующий это.(для Linux). В Win. есть такой механизм - SEH.
Пишу программу на C++ в Linux. Необходимо обрабатывать исключения типа выход за область памяти, причем не падая с сообщением Segmentation Fault. Такое событие удается отловить с помощью сигнала SIGSEGV. Но что делать дальше с приложением чтобы оно восстановило работу? Кто что посоветует? Не жду легких решений, но и ответов типа это не возможно тоже не надо, т.к. все таки это как то делают.