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

广告


  

广告



广告