Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QNX/UNIX: Анатомия ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 42

Автор Π¦ΠΈΠ»ΡŽΡ€ΠΈΠΊ ОлСг Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡

}

ΠžΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌΠ°Ρ модСль ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ рядом нСдостатков, считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΈ, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Π½Π΅ обСспСчиваСт Π½Π°Π΄Π΅ΠΆΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сигналов. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ эту модСль достаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π² простых случаях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ нСобходимости ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, устанавливаСтся Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ оТидания установлСния соСдинСния Π² TCP/IP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ [9]:

void alarm_handler(int sig) { return; }

int main() {

Β ...

Β signal(SIGALRM, alarm_handler); alarm(5);

Β int rc = connect( ... );

Β alarm(0);

Β if (rc < 0 && errno == EINTR)

Β cout << "Π˜ΡΡ‚Π΅ΠΊ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚" << endl, exit(EXIT_FAILURE);

Β ...

}

Π—Π΄Π΅ΡΡŒ умСстно Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, связанноС с сигналами, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обдСляСтся Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… руководствах ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ: Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² API (

connect()
,
delay()
,
wait()
,
waitid()
ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅) Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ любого сигнала. Π’Π°ΠΊΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ API, ΠΊΠ°ΠΊ
pause()
ΠΈ
sigwait()
, Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для выполнСния пассивной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° поступлСния сигнала. МногиС ΠΈΡ… Π½ΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π² качСствС ΠΊΠΎΠ΄Π° систСмной ошибки
errno
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
EINTR
, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ для отраТСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΠΌ ΠΈΠ·Π²Π½Π΅ сигналом. ΠœΡ‹ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π² тСкстС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

if (delay(100) != 0)

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ функция

delay()
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ остаток Β«Π·Π°ΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎΒ» Π΅ΠΉ оТидания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ этого оТидания сигналом ΠΈΠ·Π²Π½Π΅ (Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ соотвСтствуСт «СстСствСнному» ΠΈΡΡ‚Π΅Ρ‡Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ).

МодСль Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… сигналов

Π’ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ (Β«Π½ΠΎΠ²ΠΎΠΉΒ») ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π΅Ρ‰Π΅ модСлью Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… сигналов) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ сигналы, Π° Π½Π°Π±ΠΎΡ€Ρ‹ сигналов β€” Ρ‚ΠΈΠΏ

sigset_t
.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

POSIX Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏ

sigset_t
опрСдСлялся Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ Β«Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΒ» всС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² систСмС сигналы; для QNX это число Ρ€Π°Π²Π½ΠΎ 64. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°
sigset_t
Π² QNX, ΠΊΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… для систСмы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, находится Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅
<target_nto.h>
:

struct { long bits[2]; }

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² этом случаС Ρ‚ΠΈΠΏ

sigset_t
β€” это битовая маска, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π·Π½Π°Π½ΠΈΠ΅ прСдставлСния этого Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ цСнности для программиста, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ обоснованно этот Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ абстрактным.

Для формирования ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² опрСдСляСтся Π½Π°Π±ΠΎΡ€ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

β€’Β 

sigemptyset(sigset_t *set)
β€” ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€
set
, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ· Π½Π΅Π³ΠΎ всС сигналы;

β€’Β 

sigfillset(sigset_t *set)
β€” ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€
set
, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π² Π½Π΅Π³ΠΎ всС сигналы;

β€’Β 

sigaddset(sigset_t *set, int signo)
β€” добавляСт Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€
set
Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ сигнал
signo
;

β€’Β 

sigdelset(sigset_t *set, int signo)
β€” удаляСт ΠΈΠ· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°
set
Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ сигнал
signo
.

Π’ качСствС

signo
Π² функциях добавлСния ΠΈ удалСния Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Ρ… сигналов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символичСская константа, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ сигналу (такая ΠΊΠ°ΠΊ
SIGINT
), Π»ΠΈΠ±ΠΎ числСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сигнала, Π½ΠΎ Π² этом случаС ΠΊΠΎΠ΄ становится зависимым ΠΎΡ‚ систСмы. Π›Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ этих 4-Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ сигналов. НапримСр:

sigset_t sig;

sigemptyset(&sig);

sigaddset(&sig, SIGPOLL);

sigaddset(&sig, SIGALRM);

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… сигналов:

SIGPOLL
ΠΈ
SIGALRM
.

Диспозиция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сигнала Π² этой ΠΌΠΎΠ΄Π΅Π»ΠΈ устанавливаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);

Π³Π΄Π΅

signo
β€” Π½ΠΎΠΌΠ΅Ρ€ (имя) сигнала, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ устанавливаСтся диспозиция;

act
β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала;

oact
β€” структура (Ссли ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅
NULL
), Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сохранСно описаниС Ρ€Π°Π½Π΅Π΅ установлСнного ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ восстановлСния Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ).

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° описания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

sigaction
ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ‚Π°ΠΊ (ΠΌΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΈΠ· опрСдСлСния Ρ‡Π°ΡΡ‚ΡŒ структуры, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для компилятора Watcom, QNX 4.X):

struct sigaction {

#define sa_handler un._sa_handler

#define sa_sigaction un._sa_sigaction

Β union {

Β Β void (*_sa_handler)(_SIG_ARGS);

Β Β void (*_sa_sigaction)(int, siginfo_t*, void*);

Β } un;

Β int sa_flags;

Β sigset_t sa_mask;

};

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅, Π½ΠΎ Π½Π΅ ΠΏΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ отличаСтся ΠΎΡ‚ описания, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² POSIX ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… UNIX [5] (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка слСдования ΠΏΠΎΠ»Π΅ΠΉ маски ΠΈ Ρ„Π»Π°Π³ΠΎΠ²; это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π³Ρ€Π°Π΄ΠΎΠΉ для прямой ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ структуры Π² стилС C++ ΠΈΠ· сообраТСний пСрСносимости):

struct sigaction {

Β /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала */

Β void (*sa_handler)(int);

Β /* сигналы, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π²ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ */

Β sigset_t sa_mask;

Β /* Ρ„Π»Π°Π³ΠΈ, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠ΅ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сигнала */

Β int sa_flags;

Β /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала */

Β void (*sa_sigaction)(int, siginfo_t*, void*);

};

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ

#define
Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… строках описания β€” это обычная Π² QNX ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° пСрСопрСдСлСния ΠΈΠΌΠ΅Π½ для компиляторов, Β«Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ…Β» Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… (Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ…) объСдинСний (
union
). Π›Π΅Π³ΠΊΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ структур Π² этих Π΄Π²ΡƒΡ… опрСдСлСниях (QNX ΠΈ POSIX) Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ подсказываСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ соблюдСния здСсь особой Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ использовании.