【Linux】中多路转接之poll
2017-07-12 11:14
429 查看
poll的简介:
poll是select服务器的一个优化,pollfd结构包含了要监视的event和发⽣的event,不再使用select“参数-值”传递的方式。
同时,pollfd并没有最大数量限制(但是数量过大后性能也是会下降)。 和select函数⼀样,poll返回后,需要轮询pollfd来获取就绪的描述符。
三个文件描述符:
epoll_creat:创建epoll模型,红黑树,就绪队列
epoll_ctl:管理epoll模型,管理红黑树,注册所需的就绪事件
epoll_wait:用来等待epoll模型,查找就绪队列
poll的 优点:
1,poll服务器,处理文件描述符的个数上面没有上限
2,poll将输入参数和输出参数进行了分离,没有必要在每一次的调用时进行设定
poll使用的是指针来实现:
1,poll是一个数组,作为输入输出函数
2,fd作为返回值,该文件描述符上面发生了什么
3,为0 非阻塞,大于0 的数字,等待多长时间,为-1 则永远进行等待
代码的编写:
#include<stdio.h>
#include<poll.h>
int main()
{
struct pollfd fds;
fds.fd = 0;
fds.events = POLLIN;
fds.revents = 0;
int timeout = -1;
while(1)
{
stdin(poll(&fds,1,timeout));
case 0:
pritnf("timeout...");
break;
case -1:
pritnf("poll");
break;
default:
{
char buf=[1024];
if(fds.revents&POLLIN)
{
ssize_t s = read(fds,fd,buf,sizeof(buf));
if(s>0)
{
buf[s] = 0;
printf("echo %s\n",buf);
}
}
}
break;
}
}
poll是select服务器的一个优化,pollfd结构包含了要监视的event和发⽣的event,不再使用select“参数-值”传递的方式。
同时,pollfd并没有最大数量限制(但是数量过大后性能也是会下降)。 和select函数⼀样,poll返回后,需要轮询pollfd来获取就绪的描述符。
三个文件描述符:
epoll_creat:创建epoll模型,红黑树,就绪队列
epoll_ctl:管理epoll模型,管理红黑树,注册所需的就绪事件
epoll_wait:用来等待epoll模型,查找就绪队列
poll的 优点:
1,poll服务器,处理文件描述符的个数上面没有上限
2,poll将输入参数和输出参数进行了分离,没有必要在每一次的调用时进行设定
poll使用的是指针来实现:
1,poll是一个数组,作为输入输出函数
2,fd作为返回值,该文件描述符上面发生了什么
3,为0 非阻塞,大于0 的数字,等待多长时间,为-1 则永远进行等待
代码的编写:
#include<stdio.h>
#include<poll.h>
int main()
{
struct pollfd fds;
fds.fd = 0;
fds.events = POLLIN;
fds.revents = 0;
int timeout = -1;
while(1)
{
stdin(poll(&fds,1,timeout));
case 0:
pritnf("timeout...");
break;
case -1:
pritnf("poll");
break;
default:
{
char buf=[1024];
if(fds.revents&POLLIN)
{
ssize_t s = read(fds,fd,buf,sizeof(buf));
if(s>0)
{
buf[s] = 0;
printf("echo %s\n",buf);
}
}
}
break;
}
}
相关文章推荐
- 【Linux】I/O多路转接poll
- 【Linux】多路 IO转接服务器 — poll
- Linux高性能服务器之多路转接(2)---poll模型
- 【Linux网络编程】基于TCP流 I/O多路转接(poll) 的高性能http服务器
- Linux I/O多路转接----poll模型
- Linux: I/O多路转接之poll(有图有代码有真相!!!)
- Linux【网络编程】——I/O多路转接之Poll服务器
- Linux下高级I/O多路转接之poll服务器
- 多路复用 I/O 多路转接 select / poll / epoll
- UNIX环境高级编程——I/O多路转接(select、pselect和poll)
- [nginx] Linux下多路复用IO接口 epoll select poll 的区别
- Linux I/O多路复用之select,poll与epoll区别
- 多路转接模型之poll
- Linux中的多路IO转接,转载
- 【Linux】多路复用之—poll
- Linux的I/O多路转接模型和select()
- Linux下套接字详解(九)---poll模式下的IO多路复用服务器
- Linux I/O多路转接之select函数
- linux的I/O多路转接select的fd_set数据结构和相应FD_宏的实现分析
- Linux高级字符设备驱动 poll方法(select多路监控原理与实现)