epoll有两种触发方式
水平触发(level trigger,LT)与 边沿触发(edge trigger,ET)
水平触发与边缘触发的区别:
水平触发:只要缓冲区有数据就会一直触发
边沿触发:只有在缓冲区增加数据的那一刻才会触发
下面举一个例子说明这两者的区别
/* 使用边沿触发 */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/epoll.h>
int main(int argc, char *argv[])
{
int epfd, nfds;
struct epoll_event event, events[10];
int i;
epfd = epoll_create(10);
event.data.fd = 0; /* 监听标准输入 */
event.events = EPOLLIN | EPOLLET; /* 读监听、边缘触发 */
//event.events = EPOLLIN; /* 读监听、边缘触发 */
epoll_ctl(epfd, EPOLL_CTL_ADD, 0, &event);
while (1)
{
nfds = epoll_wait(epfd, events, 10, -1); /* 放回就绪的描述符数量 */
for (i = 0; i < nfds; i++)
{
if (events[i].data.fd == 0)
{
printf(