linux IO select poll 代码展示
时间: 2024-11-27 07:21:21 浏览: 3
Linux中的IO Select和Poll是用于非阻塞I/O编程的重要机制,它们允许进程在多个文件描述符上等待事件发生,而不会阻塞。下面是一个简单的代码示例,展示如何使用poll()函数:
```c
#include <stdio.h>
#include <sys/poll.h>
#include <fcntl.h>
#define MAX_EVENTS 10
#define READ_FD 0
#define WRITE_FD 1
int main(int argc, char *argv[]) {
int fds[] = {READ_FD, WRITE_FD};
struct pollfd events[MAX_EVENTS];
int timeout = -1; // 非阻塞模式,-1表示无限等待
// 初始化events数组
for (int i = 0; i < 2; i++) {
events[i].fd = fds[i];
events[i].events = POLLIN | POLLPRI; // 可读或紧急数据可用
events[i].revents = 0;
}
while (true) {
// 调用poll()函数,返回值表示有活动事件的数量
int num_events = poll(events, sizeof(events) / sizeof(struct pollfd), timeout);
if (num_events > 0) {
for (int i = 0; i < num_events; i++) {
if ((events[i].revents & (POLLIN | POLLPRI)) != 0) {
printf("Event detected on descriptor %d\n", events[i].fd);
}
}
} else if (num_events == 0 && timeout == -1) {
printf("No events ready within the specified time limit.\n");
} else {
printf("An error occurred during polling: %d\n", errno);
break;
}
}
return 0;
}
```
这个程序创建了两个文件描述符(通常是读和写的socket),然后在一个无限循环中调用poll(),当有任何事件(如数据可读或写入完成)发生时,会打印出相应的提示。
阅读全文