什么是SIGPOLL的频段号码?

时间:2012-03-03 14:08:00

标签: c unix signals

struct siginfo { 

  int    si_signo;  /* signal number */
  int    si_errno;  /* if nonzero, errno value from <errno.h> */ 
  int    si_code;   /* additional info (depends on signal) */ 
  pid_t  si_pid;    /* sending process ID */ 
  uid_t  si_uid;    /* sending process real user ID */ 
  void  *si_addr;   /* address that caused the fault */ 
  int    si_status; /* exit value or signal number */ 
  long   si_band;   /* band number for SIGPOLL */ 
  /* possibly other fields also */ 

}; 

我不明白si_band

2 个答案:

答案 0 :(得分:1)

如果查看sigaction的Linux联机帮助页,您会看到:

  
      
  • SIGPOLL/SIGIO填写si_bandsi_fdsi_band事件有点掩盖        包含与poll(2)在revents字段中填充的值相同的值。        si_fd字段表示I / O事件的文件描述符        发生。
  •   

可以在链接的手册页中找到该位掩码的含义的解释 - 实质上,它告诉信号处理程序触发信号的事件类型(至少在Linux中,您还获得相应的文件描述符。)< / p>

我不确定这是多么便携。 si_band似乎位于POSIX中,但不是si_fd。参考:POSIX <signal.h>POSIX poll(2)

答案 1 :(得分:1)

进程可以请求SIGPOLL信号以实现异步I / O.来自man page of sigactions

  

SIGPOLL / SIGIO填写si_band和si_fd。 si_band事件是一个   位掩码包含与revents字段中填充的值相同的值   通过民意调查(2)。

revents描述了发生的事件的类型,并导致SIGPOLL被发送。 man page of poll详细描述了它:

  

字段revents是一个输出参数,由内核填充   实际发生的事件。在revents中返回的位可以   包括:

POLLIN There is data to read.

POLLPRI
        There is urgent data to read (e.g., out-of-band data on TCP
        socket; pseudoterminal master in packet mode has seen state
        change in slave).

POLLOUT
        Writing now will not block.

POLLRDHUP (since Linux 2.6.17)
        Stream socket peer closed connection, or shut down writing half
        of connection.  The _GNU_SOURCE feature test macro must be
        defined (before including any header files) in order to obtain
        this definition.

POLLERR
        Error condition (output only).

POLLHUP
        Hang up (output only).

POLLNVAL
        Invalid request: fd not open (output only).