随想录(epoll的使用)

栏目: 后端 · 发布时间: 7年前

内容简介:【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】要说linux下面最好用的接口恐怕就是epoll了。不管是网络编程,还是其他pipe编程,使用epoll都很方便。而且,epoll的函数个数少,结构也非常简单。一般只要学好了epoll_create、epoll_ctl、epoll_wait、close这四个函数就可以了。如果大家有这方面的需求,可以找一本linux编程的书来看一看,相信肯定会有收获。上面的代码只是抛砖引玉。我自己使用的时候,最常用的框架

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

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

#include <stdio.h>
#include <unistd.h>
#include <sys/epoll.h>

#define MAX_EVENTS 10

static int epoll_fd;
static struct epoll_event events[MAX_EVENTS];

int
main(int argc, char* argv[]){

	struct epoll_event ev;
	int comm_pipes[2];

	//
	//init data
	//
	epoll_fd = epoll_ceate(1024);
	pipe(comm_pipes);

	//
	//add common_pipes
	//
	ev.events = EPOLLIN;
	ev.data.fd = comm_pipes[0];
	epoll_ctl(epoll_fd, EPOLL_CTL_ADD, comm_pipes[0], &ev);

	//
	// send data
	//
	write(comm_pipes[1], "hello", strlen(“hello”));
	if(-1 != epoll_wait(epoll_fd, events, MAX_EVENTS, -1)){
		char buf[10];
		read(events[0].data.fd, buf, 10);
		printf("%s\n", buf);
	}

	//
	//close epoll and pipe
	//
	epoll_ctl(epoll_fd, EPOLL_CTL_DEL, comm_pipes[0], -1);
	close(epoll_fd);
	close(comm_pipes[0]);
	close(comm_pipes[1]);

	return 0;
}

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

我用微软改变世界

我用微软改变世界

保罗·艾伦 / 吴果锦 / 浙江人民出版社 / 2012-3 / 46.00元

《我用微软改变世界(微软联合创始人保罗•艾伦回忆录)》内容简介:1975年,两个从大学退学的男孩夜以继日地设计一款软件。其中一个男孩就是后来的世界首富比尔盖茨,而另外一个则作为盖茨背后的男人,一直生活在盖茨的阴影里,其实,他的人生经历远比盖茨更为传奇和丰富。 16岁,与比尔盖茨在顶级名校湖畔中学相遇,成为最佳拍档,无数趣事,无数闹腾,高呼“处男万岁”还不够,还得意扬扬把这话刻在碑上留给学弟们......一起来看看 《我用微软改变世界》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具