当前位置: 首页 > news >正文

要制作一个自己的网站知名设计公司有哪些

要制作一个自己的网站,知名设计公司有哪些,黄石市seo关键词优化怎么做,网站备案 空间一、poll()函数解析 不同与select使⽤用三个位图来表⽰示三个fdset的⽅方式#xff0c;poll使⽤用⼀一个 pollfd的指针实现。pollfd结构包含了要监视的event和发⽣生的event#xff0c; 不再使⽤用select“参数-值”传递的⽅方式。同时#xff0c;pollfd并没有最⼤大数量限…一、poll()函数解析 不同与select使⽤用三个位图来表⽰示三个fdset的⽅方式poll使⽤用⼀一个 pollfd的指针实现。pollfd结构包含了要监视的event和发⽣生的event   不再使⽤用select“参数-值”传递的⽅方式。同时pollfd并没有最⼤大数量限制但是数量过⼤大后性能也是会下降。 和select函数⼀一样  poll返回后需要轮询pollfd来获取就绪的描述符。 poll()函数这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数下面是这个函数的声明#include poll.hint poll(struct pollfd fds[], nfds_t nfds, int timeout)参数说明:struct pollfd struct pollfd{   int fd;              //文件描述符   short events;    //等待的事件   short revents;   //实际发生的的事件   };    events和revents是通过对代表各种事件的标志进行逻辑或运算构建而成的。events包括要监视的事件  poll用已经发生的事件填充revents。poll函数通过在revents中设置标志字符POLLHUP、POLLERR、POLLNVAL等来反映相关         条件的存在。 不需要在events中对于这些标志符相关的比特位进行设置。如果fd小于0 则events字段被忽略而revents被置为0. 标准中没有说明如何处理文件结束。文件结束可以通过revents的标识符POLLHUP或返回0字节的常规读操作来传达。 即使POLLIN或POLLRDNORM指出还有数据要读POLLHUP也可能会被设置。因此应该在错误检验之前处理正常的读操作。 poll函数的事件标志符值:常量说明POLLIN普通或优先 带数据可读POLLRDNORM                                     普通数据可读POLLRDBAND优先级带数据       可读POLLPRI高优先级数据       可读POLLOUT普通数据可写POLLWRNORM普通数据可写POLLWRBAND优先级带数据       可写POLLERR发生错误POLLHUP发生挂起POLLNVAL描述字不是一 个打开的文件 注后三个只能作为描述字的返回结果存储在revents中而不能作为测试条件用于events中。fds是一个struct pollfd结构类型的数组用于存放需要检测其状态的Socket描述符每当调用这个函数之后系统不会清空这个数组操作起来比较方便特别是对于socket连接比较多的情况下在一定程度上可以提高处理的效率这一点与select()函数不同调用select()函数之后select()函数会清空它所检测的socket描述符集合导致每次调用select()之前都必须把socket描述符重新加入到待检测的集合中因此select()函数适合于只检测一个socket描述符的情况而poll()函数适合于大量socket描述符的情况 nfdsnfds_t类型的参数用于标记数组fds中的结构体元素的总数量 timeout是poll函数调用阻塞的时间单位毫秒 返回值:0 数组fds中准备好读、写或出错状态的那些socket描述符的总数量 0 数组fds中没有任何socket描述符准备好读、写或出错此时poll超时超时时间是timeout毫秒换句话说如果所检测的socket描述符上没有任何事件发生的话那么poll()函数会阻塞timeout所指定的毫秒时间长度之后返回如果timeout0那么poll() 函数立 即返回而不阻塞如果timeoutINFTIM那么poll() 函数会一直阻塞下去直到所检测的socket描述符上的感兴趣的事件发生是才返回如果感兴趣的事件永远不发生那么poll()就会永远阻塞下去 -1 poll函数调用失败同时会自动设置全局变量errno二、poll应用实例实例一用poll监视输入输出#includestdio.h #includepoll.h #includestdlib.h #includestring.h int main(int argc,char *argv[]) {struct pollfd _poll[1];_poll[0].fd0;_poll[0].eventsPOLLIN;_poll[0].revents0;int timeout3000;int i0;char buf[1024]; while(1) {switch(poll(_poll,1,timeout)){case 0:printf(timeout);break;case -1:printf(poll);break;default:{for(i0;i2;i){if((_poll[0].fd0)(_poll[0].revents)POLLIN){ssize_t sread(0,buf,sizeof(buf)-1);if(s0){buf[s]0;if(strncmp(buf,hello poll,10)0){close(_poll[i].fd);return 1;}printf(this is test:poll:%s\n,buf);}}}}break;} } return 0; } 事例二poll实现服务器端 #includestdio.h #includestdlib.h #includepoll.h #includeunistd.h #includesys/types.h #includesys/socket.h #includearpa/inet.h #includenetinet/in.h #includestring.h static void usage(char *proc) {printf(usage:%s [local_ip] [local_port]\n,proc); } int startup(char* _ip,int _port) {//create socketint socksocket(AF_INET,SOCK_STREAM,0);if(sock0){perror(socket);return 2;}//port multiplexingint flg1; setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,flg,sizeof(flg));struct sockaddr_in local;local.sin_familyAF_INET;local.sin_addr.s_addrinet_addr(_ip);local.sin_porthtons(_port);//bindif(bind(sock,(struct sockaddr*)local,sizeof(local))0){perror(bind);return 3;}//listenif(listen(sock,10)0){perror(listen);return 4;}return sock; } int main(int argc,char *argv[]) {if(argc!3){usage(argv[0]);return 1;}int listen_sockstartup(argv[1],atoi(argv[2]));struct pollfd fd_set[2];fd_set[0].fdlisten_sock;fd_set[0].eventsPOLLIN;fd_set[0].revents0;int timeout2000;int nsizeof(fd_set)/sizeof(fd_set[0]);struct sockaddr_in client;socklen_t lensizeof(client);int i1;for(;in;i){fd_set[i].fd-1;}int maxfd0;while(1){switch(poll(fd_set,maxfd1,timeout)){case 0:printf(timeout..\n);break;case -1:printf(poll);break;default:{for(i0;in;i){if((fd_set[i].fdlisten_sock) \(fd_set[i].revents)POLLIN){int new_sockaccept(listen_sock,\(struct sockaddr*)client,len);if(new_sock0){perror(accept);continue;}printf(get a new client:\n);int j0;for(j0;jn;j){if(fd_set[j].fd-1){fd_set[j].fdnew_sock;fd_set[j].eventsPOLLIN;fd_set[j].revents0;break;}} if(jn){close(new_sock);}if(jmaxfd){maxfdj;}}else if((fd_set[i].fd0) (fd_set[i].revents)POLLIN){char buf[1024];ssize_t sread(fd_set[i].fd,buf,sizeof(buf)-1);if(s0){buf[s]\0;printf(client: %s\n,buf);write(fd_set[i].fd,buf,strlen(buf));}else if(s0){close(fd_set[i].fd);int p1;for(;pn;i){if((fd_set[p].fd!-1)(p!i)){int tempfd_set[i].fd;fd_set[i].fdfd_set[p].fd;fd_set[p].fdtemp;}}}}}}break;}}return 0; }三、总结 1、poll的优点 1poll() 在应付大数目的文件描述符的时候相比于select速度更快相对于select更加高效。 2解决了select处理文件描述符有上限默认1024的限制。 2、poll缺点 1、大量的fd的数组被整体复制于用户态和内核地址空间之间而不管这样的复制是不是有意义。  2、与select一样poll返回后需要轮询pollfd来获取就绪的描述符  3、事实上同时连接的⼤大量客户端在⼀一时刻可能只有很少的处于就绪状态因此随着监视的描述符数量的增长其效率也会线性下降。
http://wiki.neutronadmin.com/news/284492/

相关文章:

  • 网站开发市场规模莲都区建设局门户网站
  • 武锡网站建设生购房政策大连网站设计开发
  • 给村里做网站wordpress与drupal对比
  • 深圳做网站乐云seo费用优惠佛山做企业网站的公司
  • 云主机多个网站西安网站策划公司
  • 上海闵行建网站公司wordpress实现翻页效果
  • 环保部网站官网建设项目审批做棋牌网站建设多少钱
  • html个人网站策划书贵州做网站
  • php 网站换空间建筑设计专业的网站
  • 基于mvc的jsp网站开发个人网站网页模板
  • 怎么建视频网站免费的网站建设项目需求分析
  • 网络公司网站源码 网络建设工作室网站模板 织梦广告设计公司源码莱西网站建设哪家好
  • 个人网站如何做淘宝客广西建筑八大员报考官网
  • 正规建网站企业dw自己做网站需要什么
  • 微网站如何做微信支付宝支付宝支付接口网站的性能特点
  • 建设部网站阮建昌公示数字媒体应用 网站开发
  • 免费wap自助建站系统电商软件开发费用
  • wordpress企业网站教程网站增长期怎么做
  • 巩义网站建设wordpress软件网站模板下载失败
  • 昆明市住房和城乡建设局门户网站wordpress 更换中文
  • 购物网站开发公司汽水音乐怎么推广赚钱
  • 芜湖网站制作网站建设续费多少钱
  • 淄博网站公司wordpress 拖拽页面
  • 做页面设计的网站手机免费建站平台下载
  • 公司给别人做的网站违法吗培训机构倒闭
  • 沛县网站上传网站到虚拟主机
  • 白山商城网站建设wordpress 文档工具
  • 制作好的网站昆明网站建设公司哪家口碑好
  • 东莞网站推广排行网站建设采购项目合同书
  • 诸城做网站的公司网站推广策划方案大数据