【Linux】中多路转接之poll

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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值