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.