Читаем Разработка приложений в среде Linux. Второе издание полностью

Если вам нужно проверить SI_TKILL, используйте следующий сегмент кода для определения этого значения:

#ifndef SI_TKILL

#define SI_TKILL -6

#endif

SI_TKILL не специфицирован ни в каком стандарте (хотя допускается ими), поэтому его следует применять осторожно в переносимых программах.

SI_KERNEL

Сигнал сгенерирован ядром.

Когда SIGILL, SIGFPE, SIGSEGV, SIGBUS и SIGCHLD посылаются ядром, то si_code вместо si_kernel принимает значения, перечисленные в табл. 12.3[71].

Таблица 12.3. Значения si_code для специальных сигналов

Сигналsi_codeОписание
SIGILLILL_ILLOPCНеправильный код операции (opcode).
ILL_ILLOPCНеправильный операнд.
ILL_ILLOPCНеправильный режим адресации.
ILL_ILLOPCНеправильная ловушка (trap).
ILL_ILLOPCПривилегированный код операции.
ILL_ILLOPCПривилегированный регистр.
ILL_ILLOPCВнутренняя ошибка стека.
ILL_ILLOPCОшибка сопроцессора.
SIGFPEFPE_INTDIVДеление целого на ноль.
FPE_INTOVFПереполнение целого.
FPE_FLTDIVДеление числа с плавающей точкой на ноль.
FPE_FLTOVFПереполнение числа с плавающей точкой.
FPE_FLTUNDПотеря значимости числа с плавающей точкой.
FPE_FLTRESНеточный результат числа с плавающей точкой.
FPE_FLTINVНеверная операция с плавающей точкой.
FPE_FLTSUBЧисло с плавающей точкой вне диапазона.
SIGSEGVSEGV_MAPPERАдрес не отображается на объект.
SEGV_ACCERRНеверные права доступа для адреса.
SIGBUSBUS_ADRALNНеверное выравнивание адреса.
BUS_ADRERRНесуществующий физический адрес.
BUS_OBJERRСпецифичный для объекта сбой оборудования.
SIGCHLDCLD_EXITEDДочерний процесс завершен.
CLD_KILLEDДочерний процесс уничтожен.
CLD_DUMPEDДочерний процесс уничтожен с выводом дампа памяти в файл.
CLD_TRAPPEDДочерний процесс достиг точки останова.
CLD_STOPPEDДочерний процесс приостановлен.

Чтобы помочь прояснить разные значения, которые может принимать si_code, рассмотрим пример, в котором SIGCHLD генерируется четырьмя разными способами: kill(), sigqueue(), raise() (использует системный вызов tkill()) и созданием дочернего процесса, который немедленно прерывается.

 1: /* sicode.с */

 2:

 3: #include

 4: #include

 5: #include

 6: #include

 7:

 8: #ifndef SI_TKILL

 9: #define SI_TKILL -6

10: #endif

11:

12: void handler(int signo, siginfo_t *info, void *f ) {

13:  static int count = 0;

14:

15:  printf("перехвачен сигнал, отправленный ");

16:  switch(info->si_code) {

17:  case SI_USER:

18:   printf("kill()\n"); break;

19:  case SI_QUEUE:

20:   printf("sigqueue()\n"); break;

21:  case SI_TKILL:

22:   printf("tkill() или raise()\n"); break;

23:  case CLD_EXITED:

24:   printf ("ядро сообщает, что дочерний процесс завершен\n"); exit(0);

25:  }

26:

27:  if (++count == 4) exit(1);

28: }

29:

30: int main() {

31:  struct sigaction act;

32:  union sigval val;

33:  pid_t pid = getpid();

34:

35:  val.sival_int = 1234;

36:

37:  act.sa_sigaction = handler;

38:  sigemptyset(&act.sa_mask);

39:  act.sa_flags = SA_SIGINFO;

40:  sigaction(SIGCHLD, &act, NULL);

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных