示例
等待用户输入数据,如果没有则打印 timeout,否则获取用户输入,并输出
#include <stdio.h>
#include <stdlib.h>
#include <sys/epoll.h>
#define MAXEVENTS 10
int main(void)
{
int epfd,ret;
struct epoll_event ev;// 请求事件结构体
struct epoll_event ret_ev[MAXEVENTS];
char buffer[64] = {0};
epfd = epoll_create(1);
if (epfd == -1){
perror("[ERROR] epoll_create(): ");
}
printf("epfd = %d\n",epfd);
ev.data.fd = 0; // 设置文件描述符
ev.events = EPOLLIN;// 设置事件
ret = epoll_ctl(epfd,EPOLL_CTL_ADD,0,&ev);
if (ret == -1){
perror("[ERROR] epoll_ctl(): ");
exit(EXIT_FAILURE);
}
for(;;){
ret = epoll_wait(epfd,ret_ev,MAXEVENTS,1000);// 等待文件描述符关联的事件发生
if (ret == -1){
perror("[ERROR] epoll_wait(): ");
exit(EXIT_FAILURE);
}else if(ret == 0){
printf("Timeout.\n");
}else if (ret > 0){
fgets(buffer,sizeof(buffer),stdin);
printf("buffer : %s\n",buffer);
}
}
return 0;
}
练习
使用 epoll 监听有名管道,当有名管道有数据时,读取数据并打印