poll实现I/O多路复用
来源:互联网 发布:软件项目计划安排 编辑:程序博客网 时间:2024/06/05 01:51
poll函数原型
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<poll.h>int main(int argc,char* argv[]){// if(argc !=3)// {// printf("Usage #: %s [ip] [port]\n",argv[0]);// exit(1);// } //创建数组,用以指定我们感兴趣的文件描述符上发生的可读、可写和异常等事件// struct pollfd// {// int fd; //件描述符// short events; //注册的事件// short revents; //``实际发生的事件,由内核填充,输出型// }; struct pollfd fds[2]; //文件描述符 fds[0].fd=0; fds[0].events=POLLIN; //对读事件感兴趣 fds[0].revents=0;//输出型 fds[1].fd=1; fds[1].events=POLLOUT;//对写事件感兴趣 fds[1].revents=0; char buf[1024]; int done=0; int i=0; int timeout=5000;//5000毫秒,即5秒 while(!done) { int ret=poll(fds,sizeof(fds)/sizeof(fds[0]),timeout); switch(ret) { case -1: perror("poll"); exit(2); break; case 0: printf("timeout...\n"); break; default: //有事件就绪,但还需判断是哪个文件描述符的什么事件 for(i=0;i<sizeof(fds)/sizeof(fds[0]);++i) { //是否可读 //fds[i]所关心的事件是读,而是有读事件发生 if(fds[i].fd==0&&(fds[i].revents & POLLIN)) { memset(buf,'\0',sizeof(buf)); ssize_t _s=read(0,buf,sizeof(buf)-1); if(_s>0) { buf[_s -1]='\0'; if(strncmp(buf,"quit",4)==0) { close(fds[i].fd); exit(0); } printf("echo#:%s\n",buf); } } if(fds[i].fd==1&&(fds[i].revents & POLLOUT)) { memset(buf,'\0',sizeof(buf)); strcpy(buf,"mengxiangjia"); printf("echo#:%s\n",buf); sleep(3); } } break; } } return 0;}
0 0
- poll实现I/O多路复用
- poll实现I/O多路复用
- poll() | 多路复用 I/O
- poll() | 多路复用 I/O
- I/O多路复用poll
- I/O多路复用之poll
- I/O 多路复用之poll
- I/O多路复用之poll
- I/O多路复用之poll
- I/O多路复用之poll
- I/O多路复用之poll
- I/O多路复用之poll
- 浅析I/O多路复用:select、poll、epoll
- I/O多路复用技术之 - poll
- I/O 多路复用之 Event Poll
- I/O多路复用---select、poll、epoll
- I/O多路复用之select/poll/epoll
- I/O多路复用(select、poll、epoll)
- Netty高性能大容量Socket并发
- springmvc + form:form 上传文件配置。
- Qt中显示复杂列表
- openlayers with Google maps 简单教程
- Unity 3D - 光源组件( Light )
- poll实现I/O多路复用
- Oracled的OCA、OCP、OCM详细介绍
- Android 开发工具集合
- #518 Super Ugly Number
- 利用PopupWindow和RecyclerView来实现头像的选择(在电视上选择头像)
- Nginx直接跳转
- ZeroMQ研究与应用分析
- WEB网站常见受攻击方式及解决办法
- JavaEE程序猿之对象的内存模型(17)