From d7b9ff38ad848cd9b00f87152aa9094303346db4 Mon Sep 17 00:00:00 2001 From: lyz Date: Fri, 1 Sep 2017 12:34:37 -0700 Subject: [PATCH 1/2] my first epoll test --- epoll_ET_test1.c | 45 ++++++++++++++++++++++++++++ "epoll_ET\345\217\202\350\200\203.c" | 30 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 epoll_ET_test1.c create mode 100644 "epoll_ET\345\217\202\350\200\203.c" diff --git a/epoll_ET_test1.c b/epoll_ET_test1.c new file mode 100644 index 0000000..9f127c0 --- /dev/null +++ b/epoll_ET_test1.c @@ -0,0 +1,45 @@ +/************************************************************************* + > File Name: epoll_ET_test1.c + > Author: + > Mail: + > Created Time: 2017年08月30日 22时18分41秒 PDT + ************************************************************************/ + +#include +#include +#include +#include +//我的第一个epoll程序 +//注释掉的代码和现在的效果一样 ,如果没有read()程序无限死循环,因为缓冲区的数据没有读出来 +//只要缓冲区有数据,就会触发事件,这是LT模式,epoll的ET模式解决了这个问题 或者加read()。 +//可以通过修改缓冲区大小进行测试,注意输入的字符后面有换行符'\n' +int main() +{ + int epfd, nfds; + //char buf[256]; + struct epoll_event ev, events[5]; + //ev用于注册事件,数组用于返回要处理的事件。 + epfd = epoll_create(1); + //只需要监听一个描述符--标准输入STDIN_FILENO + ev.data.fd = STDIN_FILENO; + ev.events = EPOLLIN|EPOLLET;//ET模式 + //ev.events = EPOLLIN;//LT模式 + + //监听读状态,同时设置ET模式 + epoll_ctl(epfd, EPOLL_CTL_ADD, STDIN_FILENO, &ev); + //注册epoll事件 + while(1) + { + nfds = epoll_wait(epfd, events, 5, -1); + for(int i = 0; i < nfds; ++i) + { + if(events[i].data.fd == STDIN_FILENO) + { + printf("my first epoll_ET_test1.c\n"); + //read(STDIN_FILENO, buf, sizeof(buf)); + } + } + } + return 0; +} + diff --git "a/epoll_ET\345\217\202\350\200\203.c" "b/epoll_ET\345\217\202\350\200\203.c" new file mode 100644 index 0000000..15aca66 --- /dev/null +++ "b/epoll_ET\345\217\202\350\200\203.c" @@ -0,0 +1,30 @@ +/************************************************************************* + > File Name: epoll_ET参考.c + > Author: + > Mail: + > Created Time: 2017年08月30日 22时15分57秒 PDT + ************************************************************************/ + +#include +#include +//#include +#include +//using namespace std; +int main(void) +{ + int epfd,nfds; + struct epoll_event ev,events[5];//ev用于注册事件,数组用于返回要处理的事件 + epfd=epoll_create(1);//只需要监听一个描述符——标准输入 + ev.data.fd=STDIN_FILENO; + ev.events=EPOLLIN|EPOLLET;//监听读状态同时设置ET模式 + epoll_ctl(epfd,EPOLL_CTL_ADD,STDIN_FILENO,&ev);//注册epoll事件 + for(;;) + { + nfds=epoll_wait(epfd,events,5,-1); + for(int i=0;i Date: Fri, 1 Sep 2017 12:44:54 -0700 Subject: [PATCH 2/2] my first epoll test --- epoll_ET_test1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epoll_ET_test1.c b/epoll_ET_test1.c index 9f127c0..0c76003 100644 --- a/epoll_ET_test1.c +++ b/epoll_ET_test1.c @@ -9,7 +9,7 @@ #include #include #include -//我的第一个epoll程序 +//我的第一个epoll程序1 //注释掉的代码和现在的效果一样 ,如果没有read()程序无限死循环,因为缓冲区的数据没有读出来 //只要缓冲区有数据,就会触发事件,这是LT模式,epoll的ET模式解决了这个问题 或者加read()。 //可以通过修改缓冲区大小进行测试,注意输入的字符后面有换行符'\n'