int sigorset (sigset_t *dest, sigset_t *left, sigset_t *right);
int sigandset (sigset_t *dest, sigset_t *left, sigset_t *right);
如果
set
所指定的信號集是空的,則
sigisemptyset()
會傳回
1
,否則會傳回
0
。
sigorset()
會把信號集
left
與
right
的聯集(二元OR 運算)擺入
dest
。
sigandset()
會
把信號集
left
與
right
的交集(二元AND 運算)擺入
dest
。執行成功時,這兩個函式
都會傳回
0
;發生錯誤時,則會傳回
-1
並把
errno
設定為
EINVAL
。
儘管這些函式都很有用,但是想要與POSIX 完全相容的程式應該避免使用這些函式。
阻擋信號
稍早,我們曾討論過可再進入性(reentrancy)以及在任何時候非同步執行之信號處理程
序所引發的問題。我們探討了不可以在信號處理程序中叫用的函式,因為它們本身就不
是可再進入的。
但如果你的程式需要讓一個信號處理程序與程式中其他部分共享資料,該怎麼做?如果
你的程式正在執行的部分不想要遭到任何的中斷,包括來自信號處理程序的,該怎麼
做?我們將以上這些部分稱為程式的
關鍵區
(
critical region
),而且我們會透過暫時中
止信號的遞送來保護它們。我們會說信號遭到了
阻擋
(
blocked
)。任何信號只要遭到阻
擋就不會被處理,除非它們已不再遭到阻擋。一個行程可以阻擋任何數量的信號;遭到 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.