Описание функций Си



         

Signal - часть 2


В Turbo C++ введено расширение стандарта ANSI C, для сигналов типов SIGFPE, SIGSEGV и SIGILL. Пользовательская функция обработки сигнала вызы- вается с двумя или одним дополнительными парамет- рами. Если с помощью raise был выдан сигнал SIGFPE, SIGSEGV или SIGILL, то функция вызывается с одним дополнительным параметром, целым, опреде- ляющим что программа обработки сигнала вызвана. Точные активизационные значения для этих сигналов следующие (определены в float.h): -------------------------------------------------- Тип сигнала Активизационное значение -------------------------------------------------- SIGFPE FPE_EXPLICITGEN SIGSEGV SEGV_EXPLICITGEN SIGILL ILL__EXPLICITGEN --------------------------------------------------

Если вызывается SIGSPE при появлении исключитель- ной ситуации связанной с операциями над числами с плавающей точкой, то подпрограмма пользователя вызывается с дополнительным параметром определяю- щим FPE_xxx тип сигнала. Если вызываеются сигналы SIGILL, SIGSEGV или целочисленный вариант SIGFPE (FPE_INTOVFLOW или FPE_INTDIV0), в результате ис- ключительной ситуации процессора, то программа обработки сигнала, определнная пользователем, вы- зывается с двумя параметрами:

1. Тип исключительной ситуации SIGFPE, SIGSEGV или SIGILL (смотри float.h, в котором приве- денв все типы). Первый параметр это обычный тип сигнала, определенный в ANSI C.

2. Целый указатель на программы обработки преры- вания, которая вызвала эту программу обработки сигналов. Он указывает на список регистров процессора, которые были сохранены при возник- новении исключительной ситуации. Регистры сох- раняют в том же порядке, что и параметры прог- рамм обработки прерываний: BP, DI, SI, DS, ES, DX, CX, BX, AX, IP, CS, FLAGS. Для изменения содержимого регистра при возврате управления, измените значение в этом списке. К примеру, для получения нового значения SI сделайте при- мерно следующее:

*((int*)list_pointer+2) = new_SI_value

Таким образом вы получаете доступ к регистрам. (Смотри пример 2).




Содержание  Назад  Вперед