fp_poll 内核服务
用途
用于检查多个文件指针,文件描述符和消息队列的 I/O 状态。
语法
参数
| 项 | 描述 |
|---|---|
| 利斯特普特尔 | 指向 波尔夫德 或 波兰消息 结构的数组,或指向单个 波列特 结构。 每个结构指定一个文件指针,文件描述符或消息队列标识。 另外还指定了此文件或消息队列的相关事件。 |
| 恩夫德姆斯 | 指定要检查的文件和消息队列数。 低阶的 16 位给出了 波尔夫德 结构数组中存在的元素的数量。 高位 16 位给出了 波兰消息 结构的数组中存在的元素数。 如果 恩夫德姆斯 参数的任何一半都等于 0 ,那么假定相应的数组为 abse1e。 |
| 超时 | 指定服务等待指定的事件发生的时间长度。 如果此参数的值为 -1, fp_poll 内核服务将在至少一个指定事件发生后才返回。 如果超时值为 0 ,那么 fp_poll 内核服务将不会等待事件发生。 相反,即使未发生任何指定事件,该服务也会立即返回。 对于 超时 参数的任何其他值, fp_poll 内核服务指定等待至少发生其中一个指定事件的最大时间长度 (以毫秒为单位)。 |
| 标志 | 在 利斯特普特尔 参数中指定数据的类型:
|
描述
fp_poll 内核服务会检查指定的文件指针/描述符和消息队列,以确定它们是否已准备好进行读或写操作,或者它们是否具有异常状态暂挂。
pollfd, pollmsg和 pollist 结构在 /usr/include/sys/poll.h 文件中定义。 这些是对 轮询 子例程描述的相同结构。 一个区别是,当 fp_poll 内核服务上的 标志 参数等于 0 (零) 时, 波尔夫德 结构中的 联邦 字段包含文件指针。 如果 标志 参数设置为 POLL_FDMSG 值,那么该字段将作为所有已处理的 波尔夫德 结构中的文件描述符。 如果其各自结构中的 联邦 或 消息标识 字段的值为负值,那么将跳过该结构的处理。
在对文件和消息队列执行轮询操作时, 利斯特普特尔 参数指向 波列特 结构,该结构可以同时指定文件和消息队列。 要构造 波列特 结构,请使用 POLLIST 宏,如 轮询 子例程中所述。
如果 恩夫德姆斯 参数中的 波尔夫德 元素的 0 为 0 ,那么 利斯特普特尔 参数必须指向 波兰消息 结构的数组。
如果 恩夫德姆斯 参数中的 波兰消息 元素的 0 为 0 ,那么 利斯特普特尔 参数必须指向 波尔夫德 结构的数组。
如果 恩夫德姆斯 参数中 波兰消息 和 波尔夫德 元素的数量均为非零值,那么 利斯特普特尔 参数必须指向先前定义的 波列特 结构。
执行环境
仅可从 流程环境 调用 fp_poll 内核服务。
返回值
成功完成后, fp_poll 内核服务将返回一个值,该值指示满足选择标准的文件和消息队列的总数。 在以下方面,返回值与 恩夫德姆斯 参数类似:
- 低阶 16 位给出了文件数。
- 高位 16 位给出具有非零 收入 值的消息队列标识的数量。
使用 NFDS 和 NMSGS 宏将这两个值与返回值分隔开。 0 码为 0 (零) 表示:
- 该调用已超时。
- 任何指定的文件或消息队列都不表示存在事件。
换言之,所有 收入 字段都为 0 (零)。
当来自 fp_poll 内核服务的返回码为负数时,它将设置为以下值:
| 项 | 描述 |
|---|---|
| EINTR | 指示在 fp_poll 内核服务期间捕获了信号。 |