epoll的使用

本文介绍了epoll在Linux编程中的应用,详细讲解了epoll_create、epoll_ctl、epoll_wait和close四个核心函数,并通过示例代码展示了epoll与timer或reactor架构结合的高效使用方式。
摘要由CSDN通过智能技术生成
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feixiaoxing/article/details/81322639

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

 

    要说linux下面最好用的接口恐怕就是epoll了。不管是网络编程,还是其他pipe编程,使用epoll都很方便。而且,epoll的函数个数少,结构也非常简单。一般只要学好了epoll_create、epoll_ctl、epoll_wait、close这四个函数就可以了。如果大家有这方面的需求,可以找一本linux编程的书来看一看,相信肯定会有收获。


 
 
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/epoll.h>
  4. #include <string.h>
  5. #define MAX_EVENTS 10
  6. static int epoll_fd;
  7. static struct epoll_event events[MAX_EVENTS];
  8. int
  9. main (int argc, char* argv[]){
  10. struct epoll_event ev;
  11. int comm_pipes[ 2];
  12. //
  13. //init data
  14. //
  15. epoll_fd = epoll_create( 1024);
  16. pipe(comm_pipes);
  17. //
  18. //add common_pipes
  19. //
  20. ev.events = EPOLLIN;
  21. ev.data.fd = comm_pipes[ 0];
  22. epoll_ctl(epoll_fd, EPOLL_CTL_ADD, comm_pipes[ 0], &ev);
  23. //
  24. // send data
  25. //
  26. write(comm_pipes[ 1], "hello", strlen( "hello"));
  27. if( -1 != epoll_wait(epoll_fd, events, MAX_EVENTS, -1)){
  28. char buf[ 10];
  29. read(events[ 0].data.fd, buf, 10);
  30. printf( "%s\n", buf);
  31. }
  32. //
  33. //close epoll and pipe
  34. //
  35. epoll_ctl(epoll_fd, EPOLL_CTL_DEL, comm_pipes[ 0], NULL);
  36. close(epoll_fd);
  37. close(comm_pipes[ 0]);
  38. close(comm_pipes[ 1]);
  39. return 0;
  40. }

    上面的代码只是抛砖引玉。我自己使用的时候,最常用的框架就是epoll+timer或者是epoll+reactor架构。对于epoll+timer,也就是说在epoll之外,添加一个timer thread,这样的架构对于一般的app代码、或者是server代码,已经是绰绰有余了。用户只要设计好自己的状态机和业务逻辑就可以了。如果本身业务比较复杂,那么一般采用epoll+reactor的架构。大家可以看看云风同学编写的skynet代码,可以很好的说明这一点。对于server端的同学来说,epoll+reactor+lua,这已经是我看到的最快速、最简洁、最便捷的开发方式了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值