signal.h

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

signal.hзаголовний файл стандартної бібліотеки мови програмування С, що використовується для зазначення того, як програма обробляє сигнали під час свого виконання. Сигнал може сповіщати про деяке відхилення від очікуваної поведінки програми (як, наприклад, ділення на нуль) або про деякі асинхронні події, що відбулися поза програмою (наприклад, якщо хтось натиснув кнопку переривання програми на клавіатурі).

Сигнал може генеруватися при виклику RAISE (посилає сигнал поточному процесові) або Kill (посилає сигнал будь-якого процесу). Кожна реалізація визначає якийсь сигнал, що генерує і визначає їх генерацію. Реалізація може визначати сигнали, які відрізняються від перерахованих тут. Стандартний заголовний файл <signal.h> може визначати додаткові макроси з іменами, які починаються з SIG, для вказання значення цих додаткових сигналів. Усі подібні значення є цілими константні виразами >= 0.

Можна вказувати обробник сигналу для усіх сигналів, окрім двох (SIGKILL та SIGSTOP не можуть бути перехоплені, блоковані або проігноровані). Обробник сигналу — функція, яка направляє виклики оточенню, коли приймає відповідний сигнал. Цільове оточення призупиняє виконання програми, доки обробник сигналу не поверне значення або викличе перехід (longjmp). Для максимальної переносимості, асинхронний обробник сигналу повинен:

  • здійснювати (успішний) виклик сигналу функції
  • присвоювати значення об'єктів з типом «непов'язана змінна» sig_atomic_t
  • повертати управління

Якщо сигнал сповіщає про помилку всередині програми (а сигнал не асинхронний), то обробник сигналу може завешить її виконання, викликавши Abort, Exit або longjmp.

Методи[ред. | ред. код]

  • int raise(int sig). Штучно викликає сигнал.
  • psignal(int sig, const char *s), виводить на stderr рядок, який містить номер сигналу. Застосовується у 4.3BSD, Solaris та Linux, однак, не вказаний у стандартах POSIX та SUS.

На тих же системах string.h містить нестандартний strsignal(int sig), який працює аналогічно strerror.

  • void (*signal(int sig, void (*func)(int)))(int) назначає дію, яку програма виконуватиме при отриманні сигналу sig. Якщо значення func рівне SIG_DFL, то відбувається обробка за замовчуванням для сигналу. Якщо значення func рівне SIG_IGN, сигнал ігнорується. В інших випадках, func вказує на функцію обробник сигналу при отриманні сигналу.

Функція func може завершуватись виконанням операції виклику або викликом функції самозавершення, виводу або переходу.

Члени-типи[ред. | ред. код]

typedef i-type sig_atomic_t

Члени-макроси[ред. | ред. код]

  • SIG_DFL — Використовується для вказання способу обробки сигналів за замовчуванням.
  • SIG_IGN — Використовується для ігнорування сигналу.
  • SIG_ERR — Код помилки.

Члени-константи[ред. | ред. код]

Константа Значення Стандарти
SIGHUP Відбій POSIX
SIGINT Переривання ANSI
SIGQUIT Вихід POSIX
SIGILL Недопустима інструкція ANSI
SIGABRT Самозупинка ANSI
SIGTRAP Перехоплення події POSIX
SIGIOT Перехоплення вводу-виводу 4.2 BSD
SIGEMT Перехоплення емуляції 4.2 BSD
SIGFPE Виняток з плаваючою крапкою ANSI
SIGKILL Неперехоплюваний сигнал завершення POSIX
SIGBUS Помилка шини 4.2 BSD
SIGSEGV Порушення сегментації ANSI
SIGSYS Неправильний аргумент у системному виклику 4.2 BSD
SIGPIPE Порушення каналу POSIX
SIGALRM Завершення часу POSIX
SIGTERM Завершення ANSI
SIGUSR1 Користувацький сигнал 1 POSIX
SIGUSR2 Користувацький сигнал 2 POSIX
SIGCHLD Зміна статусу дочірнього процесу POSIX
SIGCLD Аналогічно SIGCHLD System V
SIGPWR Перезапуск після проблеми із живленням System V
SIGXCPU Обмеження процесорного часу POSIX

Посилання[ред. | ред. код]