poll()函数用法
时间: 2024-08-15 18:08:44 浏览: 73
`poll()`函数是Unix/Linux系统编程中使用的非阻塞I/O(I/O Multiplexing)的一个工具。它主要用于检测一组文件描述符中有多少是可读、可写的,以及是否有数据可用。`poll()`函数通常用于多路复用器(Multiplexer),比如Epoll、Kqueue等,在网络编程、事件驱动编程中非常常见。
基本用法如下:
```c
#include <poll.h>
struct pollfd fds[] = {
{fd, POLLIN|POLLPRI, 0}, /* 第一个描述符 */
{fd2, POLLOUT, 0}, /* 第二个描述符 */
... /* 可能有多个描述符 */
};
int timeout_ms; /* 非负数表示等待指定毫秒,0表示立即返回 */
int ret = poll(fds, sizeof(fds) / sizeof(struct pollfd), timeout_ms);
if (ret > 0) {
for (i = 0; i < ret; i++) {
if (fds[i].revents & (POLLIN | POLLPRI)) {
// 描述符已准备好读取
}
else if (fds[i].revents & POLLOUT) {
// 描述符可以写入
}
// 处理其他事件
}
}
/* 如果 ret == -1 并且errno != EINTR,则处理错误 */
```
其中,`pollfd`结构包含三个字段:文件描述符(fd)、事件标志(events,如POLLIN、POLLOUT等)和用户提供的数据。函数`poll()`会检查每个描述符的状态,并在`revents`成员中存储相应的事件结果。
阅读全文