fp_poll 内核服务

用途

用于检查多个文件指针,文件描述符和消息队列的 I/O 状态。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/poll.h>
int fp_poll (listptr, nfdsmsgs, timeout, flags)
void * listptr;
unsigned long  nfdsmsgs;
long  timeout;
uint  flags;

参数

描述
利斯特普特尔 指向 波尔夫德波兰消息 结构的数组,或指向单个 波列特 结构。 每个结构指定一个文件指针,文件描述符或消息队列标识。 另外还指定了此文件或消息队列的相关事件。
恩夫德姆斯 指定要检查的文件和消息队列数。 低阶的 16 位给出了 波尔夫德 结构数组中存在的元素的数量。 高位 16 位给出了 波兰消息 结构的数组中存在的元素数。 如果 恩夫德姆斯 参数的任何一半都等于 0 ,那么假定相应的数组为 abse1e。
超时 指定服务等待指定的事件发生的时间长度。 如果此参数的值为 -1, fp_poll 内核服务将在至少一个指定事件发生后才返回。 如果超时值为 0 ,那么 fp_poll 内核服务将不会等待事件发生。 相反,即使未发生任何指定事件,该服务也会立即返回。 对于 超时 参数的任何其他值, fp_poll 内核服务指定等待至少发生其中一个指定事件的最大时间长度 (以毫秒为单位)。
标志 利斯特普特尔 参数中指定数据的类型:
POLL_FDMSG
输入是文件描述符和/或消息队列。
重大安全事件数量
输入是文件指针。

描述

注: fp_poll 服务只适用于字符设备,管道,消息队列和套接字。 并非所有字符设备驱动程序都支持 fp_poll 服务。

fp_poll 内核服务会检查指定的文件指针/描述符和消息队列,以确定它们是否已准备好进行读或写操作,或者它们是否具有异常状态暂挂。

pollfdpollmsgpollist 结构在 /usr/include/sys/poll.h 文件中定义。 这些是对 轮询 子例程描述的相同结构。 一个区别是,当 fp_poll 内核服务上的 标志 参数等于 0 (零) 时, 波尔夫德 结构中的 联邦 字段包含文件指针。 如果 标志 参数设置为 POLL_FDMSG 值,那么该字段将作为所有已处理的 波尔夫德 结构中的文件描述符。 如果其各自结构中的 联邦消息标识 字段的值为负值,那么将跳过该结构的处理。

在对文件和消息队列执行轮询操作时, 利斯特普特尔 参数指向 波列特 结构,该结构可以同时指定文件和消息队列。 要构造 波列特 结构,请使用 POLLIST 宏,如 轮询 子例程中所述。

如果 恩夫德姆斯 参数中的 波尔夫德 元素的 0 为 0 ,那么 利斯特普特尔 参数必须指向 波兰消息 结构的数组。

如果 恩夫德姆斯 参数中的 波兰消息 元素的 0 为 0 ,那么 利斯特普特尔 参数必须指向 波尔夫德 结构的数组。

如果 恩夫德姆斯 参数中 波兰消息波尔夫德 元素的数量均为非零值,那么 利斯特普特尔 参数必须指向先前定义的 波列特 结构。

执行环境

仅可从 流程环境 调用 fp_poll 内核服务。

返回值

成功完成后, fp_poll 内核服务将返回一个值,该值指示满足选择标准的文件和消息队列的总数。 在以下方面,返回值与 恩夫德姆斯 参数类似:

  • 低阶 16 位给出了文件数。
  • 高位 16 位给出具有非零 收入 值的消息队列标识的数量。

使用 NFDSNMSGS 宏将这两个值与返回值分隔开。 0 码为 0 (零) 表示:

  • 该调用已超时。
  • 任何指定的文件或消息队列都不表示存在事件。

换言之,所有 收入 字段都为 0 (零)。

当来自 fp_poll 内核服务的返回码为负数时,它将设置为以下值:

描述
EINTR 指示在 fp_poll 内核服务期间捕获了信号。