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.