Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11650
Последний выпуск: 19.06.2015

signal

[ Оглавление ]
               SIGNAL
            
            #include <signal.h>
            
            int (*signal(sig, func)();
            int sig;                           значение сигнала
            int (*func)();                     выполняемая функция
            
               Описание.
            
               Функция signal позволяет выбрать  из  операционной  системы
         один  из трех способов обработки сигнала прерывания. Аргумент sig
         может быть одной из манифестных констант SIGINT или SIGFPE, опре-
         деленых в <signal.h>. Манифестная константа SIGINT  соответствует
         в  MS DOS сигналу прерывания INT 23H. SIGFPE соответствует преры-
         ваниям плавающей точки, которые не маскированы, такие  как  пере-
         полнение, деление на ноль, неверная операция. Аргумент func может
         быть одной из манифестных констант SIG_DFL или SIG_IGN (также оп-
         ределенных в <signal.h>), или адресом функции. При получении сиг-
         нала  прерывания  принимаемое действие зависит от значения func и
         является следующим:
            
         ЗНАЧЕНИЕ                           ЕГО СМЫСЛ
            
         SIG_IGN           Сигнал   прерывания  игнорируется.  Это
                           значение для SIGFPE не задается,   т.к.
                           состояние  процесса  с плавающей точкой
                           остается неопределенным.
                           
         SIG_DFL           Вызванный процесс завершен;  управление
                           передается   на  уровень команд MS DOS.
                           Все файлы, открытые в процессе,  закры-
                           ваются, но буферы не обновляются.
                           
         Адрес функции     Для сигналов SIGINT функции, на которую
                           указывает func,  передается    аргумент
                           SIGINT и она выполняется. Если  функция
                           завершается нормально, прерванный  про-
                           цесс возобновляет выполнение с команды,
         
                           следующей за той, в которой был получен
                           сигнал  прерывания.  Перед  выполнением
                           специфицированной функции значение func
                           устанавливается  в  SIG_DFL;  следующий
                           сигнал прерывания трактуется как и  для
                           SIG_DFL,  если  внешний  вызов  signal,
                           задающий другое значение прерывания, не
                           определен.  Это  позволяет пользователю
                           переустанавливать сигналы  в вызываемых
                           функциях, если необходимо. Для   SIGFPE
                           функциц,   на  которую  указывает func,
                           передаются два аргумента - SIGFPE и це-
                           лый подкод ошибки,  FPE-xxx-,  и  затем
                           она выполняется. (Смотрите include-файл
                           <float.h>   для   определения  подкодов
                           FPE-xxx.)     Значение     func      не
                           переустановится  до  тех  пор,  пока не
                           будет  получен  сигнал прерывания;  для
                           выхода  из  состояния  плавающей  точки
                           используется  setjmp  вместе  с longjmp
                           (см. пример  для функции_fprset).  Если
                           функция завершается нормально, прерван-
                           ный    процесс     возобновляется     в
                           неопределенном    состоянии   плавающей
                           точки.
                           
                           
               Возвращаемое значение.
            
               Функция signal возвращает предыдущее значение func. Возвра-
         щаемое значение -1 свидетельствует об ошибке и errno устанавлива-
         ется в EINVAL, определяя неверное значение sig.
               См.также abort, exit,  _exit,  _fpreset,  spawnl,  spawnle,
         spawnlp, spawnv, spawnve, spawnvp.
            
               Замечание: В тех child-процессах, которые созданы посредст-
         вом  вызова процедур exec или spawn, установленные сигналы преры-
         ваний не сохраняются. Эти сигналы в child-процессе переустанавли-
         ваются по умолчанию.
      
               Пример:
            
            #include <stdio.h>
            #include <signal.h>
            #include <stdlib.h>
            #include <process.h>
            int handler();
            
            main()
                  {
                  if(signal(SIGINT, handler)==(int(*)())-1) {
                      fprintf(stderr,"couldn't set SIGINT\n");
                      abort();
                      }
                      .
         
                      .
                      .
                  }
            
            int handler()
                  {
                  char ch;
                  printf("terminate processing? ");
           
                  scanf("%1c", &ch);
                  if (ch=='y' ::ch=='Y')
                        exit(0);
                  signal(SIGINT, handler);
                  }
            
               /* функция signal, вызванная здесь для  следующего  сигнала
         прерываний, посылает управление не в ОС, а к handler() */
            
           
            

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог