sigwaitinfo() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

sigwaitinfo() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

sigwaitinfo、sigtimedwait - 同步等待排隊的訊號

語法

#include <signal.h> 

int sigwaitinfo(const sigset_t *set, siginfo_t *info);

int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout);

描述

sigwaitinfo() 暫停呼叫程序的執行,直到傳遞set中的某個訊號。(如果set中的某個訊號已針對呼叫程序掛起,sigwaitinfo() 將立即返回有關該訊號的資訊。)

sigwaitinfo() 從呼叫程序的掛起訊號列表中刪除已傳遞的訊號,並將其作為函式結果返回訊號編號。如果info引數不是 NULL,則它返回型別為siginfo_t的結構(參見sigaction(2)),其中包含有關訊號的資訊。

透過sigwaitinfo() 返回的訊號按通常順序傳遞;有關更多詳細資訊,請參見signal(7)。

sigtimedwait() 的操作方式與sigwaitinfo() 完全相同,除了它還有一個額外的引數timeout,該引數允許對程序掛起的時間設定上限。此引數的型別如下

struct timespec {
    long    tv_sec;         /* seconds */
    long    tv_nsec;        /* nanoseconds */
}

如果此結構的兩個欄位都指定為 0,則執行輪詢:sigtimedwait() 立即返回,或者返回有關針對呼叫方掛起的訊號的資訊,或者如果沒有set中的任何訊號掛起,則返回錯誤。

返回值

成功時,sigwaitinfo() 和sigtimedwait() 都返回訊號編號(即大於零的值)。失敗時,這兩個呼叫都返回 -1,並設定errno以指示錯誤。

錯誤

標籤描述
EAGAIN 在指定給sigtimedwait() 的timeout期間未傳遞set中的任何訊號。
EINTR 等待被訊號處理程式中斷。(此處理程式用於set中除其中一個之外的訊號。)
EINVAL timeout 無效。

備註

在正常使用中,呼叫程式透過先前對sigprocmask() 的呼叫阻塞set中的訊號(以便如果在連續呼叫sigwaitinfo() 或sigtimedwait() 之間傳遞這些訊號,則不會發生這些訊號的預設處置),並且不為這些訊號建立處理程式。在多執行緒程式中,應在所有執行緒中阻塞訊號,以防止訊號傳遞給除呼叫sigwaitinfo() 或sigtimedwait() 的執行緒之外的執行緒。)

POSIX 未指定sigtimedwait() 的timeout引數的 NULL 值的含義,允許這種可能性具有與對sigwaitinfo() 的呼叫相同的含義,實際上,這正是 Linux 上所做的。

符合標準

POSIX.1-2001

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.