epoll函数使用实例并且逐句解释
时间: 2023-09-08 08:09:28 浏览: 50
以下是一个使用epoll函数的实例:
```c
#include <sys/epoll.h>
#define MAX_EVENTS 10
int main() {
int epoll_fd, num_events;
struct epoll_event events[MAX_EVENTS];
// 创建epoll实例
epoll_fd = epoll_create1(0);
if (epoll_fd == -1) {
perror("epoll_create1");
return 1;
}
// 添加需要监听的文件描述符
struct epoll_event ev;
ev.events = EPOLLIN;
ev.data.fd = STDIN_FILENO;
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, STDIN_FILENO, &ev) == -1) {
perror("epoll_ctl: stdin");
return 1;
}
// 等待事件发生
while (1) {
num_events = epoll_wait(epoll_fd, events, MAX_EVENTS, -1);
if (num_events == -1) {
perror("epoll_wait");
return 1;
}
// 处理发生的事件
for (int i = 0; i < num_events; i++) {
if (events[i].data.fd == STDIN_FILENO) {
char buf[1024];
int num_read = read(STDIN_FILENO, buf, 1024);
if (num_read == -1) {
perror("read");
return 1;
}
printf("Read %d bytes: %s\n", num_read, buf);
}
}
}
return 0;
}
```
此程序使用epoll函数来等待某个文件描述符(此处是标准输入)上的读事件。以下是每个步骤的解释:
1. 创建epoll实例:使用epoll_create1函数创建一个epoll实例,并返回一个文件描述符。如果出现错误,将打印错误信息并退出程序。
2. 添加需要监听的文件描述符:使用epoll_ctl函数将需要监听的文件描述符添加到epoll实例中。此处将标准输入的文件描述符添加到实例中,并指定监听读事件。
3. 等待事件发生:使用epoll_wait函数等待事件发生。该函数将阻塞,直到有事件被触发。在此处,将等待标准输入上的读事件。如果出现错误,将打印错误信息并退出程序。
4. 处理发生的事件:使用for循环遍历所有发生的事件,并根据事件类型执行相应的操作。在此处,只处理标准输入上的读事件。如果发生错误,将打印错误信息并退出程序。