epoll的水平触发和边沿触发,及为什么边沿触发必须使用非阻塞?

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(
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值