epoll的边缘触发和水平触发:
epoll的默认模式是水平触发。
先大概了解一下这两种触发模式有什么不同:
水平触发(Level Trigger,也称条件触发):只要满足条件,就触发一个事件(只要有数据还未读完,就会一直触发)
边缘触发(Edge Trigger):每当状态发生变化时就触发一个事件。
可能概念不容易理解,这里举一个例子大概就能明白两者的区别了:比如某个人让你去买几袋酱油,你只买了一袋回去,水平触发的做法就是他让你继续去把剩下的几袋酱油买回来,如果没有完成任务,就一直通知你;边缘触发的做法就是不管完没完成任务,反正他让你买了,买没买完就是你自己的事了,下次买酱油这件事他就不管了,会让你去做其它的事。
通过上面的例子,我们对边缘触发和水平触发有了一个大概的了解,下面通过代码来深入了解:
#include <stdio.h>
#include <stdlib.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <string.h>
#define MAXLINE 10
int main()
{
pid_t pid;
int fd[2];
int i;
char str[MAXLINE], ch = 'a';
bzero(str, sizeof(str));
//使用管道,fd[0]默认是读端,fd[1]默认是写端
pipe(fd);
pid = fork();
if(pid == 0) //child 负责写端
{
close(fd[0]);
wh