2016-12-14 3 views
1

Кажется, что независимо от того, как я заполняю struct sigaction для набора вызова функции sigaction, то .sa_flags член получает ORed с 0x4000000 или, по крайней мере, как я понимаю, если я позже извлечь dispositon с sigaction(Signum, NULL, &sa).Что такое флаг sixaction 0x4000000 в Linux?

страница руководства по sigaction перечислены следующие ORable значения для .sa_flags:

SA_NOCLDSTOP 
SA_NOCLDWAIT 
SA_NODEFER 
SA_ONSTACK 
SA_RESETHAND 
SA_RESTART 
SA_SIGINFO 

0x4000000 до 0 логических значений AND с каждым из указанных выше. Что такое 0x4000000?

+0

Уверены ли вы, что вам не хватает '0'? 'SA_NODEFER' is 0x4000000' – Barmar

+2

В' /usr/include/x86_64-linux-gnu/asm/signal.h'/'/usr/include/asm-generic/signal.h: 'Я вижу:' #define SA_RESTORER 0x04000000 ' – alk

+0

Это, наверное, так. Это устаревший флаг, поэтому другие включенные файлы закомментированы. – Barmar

ответ

4

Ссылаясь my comment, из this man-page мы узнаем:

sa_restorer

Не предназначен для использования приложений. Этот флаг используется библиотеками C , чтобы указать, что поле sa_restorer содержит адрес «сигнального батута». См. sigreturn(2) для получения более подробной информации.