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

备案查询站长工具品牌网站建设有哪些内容

备案查询站长工具,品牌网站建设有哪些内容,app代理推广合作,免费推广网站下载I/O复用使得程序能够同时监听多个文件描述符#xff0c;这对提高程序的性能至关重要。 举个例子#xff1a; 就好比你天天玩手机#xff0c;你妈为了监控你#xff0c;在你房间安装了一个监控#xff0c;这个监控可以实时监控你的一举一动#xff0c;并上传到你妈手机上…        I/O复用使得程序能够同时监听多个文件描述符这对提高程序的性能至关重要。 举个例子 就好比你天天玩手机你妈为了监控你在你房间安装了一个监控这个监控可以实时监控你的一举一动并上传到你妈手机上并提醒你妈你在玩手机快去揍他。你看着可不可怕一看见你玩手机就揍你没天理。 I/O复用就是这样 你妈把想监控的事件告诉监控监控负责监控并通知你妈去 揍你揍你就是对就绪事件做出的处理。虽然这个例子不太好但很形象。 系统函数调用 select系统调用 #include sys/select.hint select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout); 参数  nfds参数类型为int指被监听的所有文件描述符总数 。它通常被设置为select监听的所有文件描述符中的最大值1因为文件描述符是从0开始计数的。readfds,writefds,exceptfds分别指向 可读可写和异常等事件对应的文件描述符集合。通过这三个参数传入自己想要监控的文件描述符。select调用返回后内核将修改他们来通知应用程序那些文件描述符已经就绪。timeout timeout用来设置select函数的超时调用时间。 返回值 成功返回就绪可读可写异常文件描述符总数在规定时间内没有就绪就返回0调用失败返回-1并设置errno如果在等待时间内接收到信号则立即返回-1并设置errno为EINTR。  fd_set结构体类型  fd_set结构体仅包含一个整型数组该数组中的每一个元素的每一个比特位标记一个文件描述符。里面通过一个宏FD_SETSIZE来限制select能同时处理文件的总量。 timeout结构体类型 采用timeval结构体指针是因为内核将修改它以告诉应用程序select等待了多久但是select调用失败后返回的这个值是不确定的。 下面就是select系统调用的简单使用 #include stdio.h#include stdlib.h#include sys/select.hint main(void){fd_set rfds;struct timeval tv;int retval;//下面是监控输入文件描述符 fd 0/* Watch stdin (fd 0) to see when it has input. */FD_ZERO(rfds);//将rfds类型的变量的所有比特位置为0FD_SET(0, rfds);//设置rfds上面的比特位/* Wait up to five seconds. *///设置超时时间tv.tv_sec 5;tv.tv_usec 0;retval select(1, rfds, NULL, NULL, tv);//监控的文件描述符是0 填入是就是1/* Dont rely on the value of tv now! */if (retval -1)perror(select());else if (retval)//成功返回就绪文件描述符的总数printf(Data is available now.\n);/* FD_ISSET(0, rfds) will be true. */elseprintf(No data within five seconds.\n);exit(EXIT_SUCCESS);}上面代码是监控输入文件描述符在五秒时间内如果没有输入就会返回0有数据就会返回1因为只监控了一个文件描述符所以返回1。  你也可以进行循环监控。 poll系统调用 #include poll.hint poll(struct pollfd *fds, nfds_t nfds, int timeout);参数 fdsfds参数就是一个pollfd结构体类型数组后面会讲。 nfds指定被监听事件集合大小typedef unsigned long int nfds_t就是长整型。 timeout参数类型为int单位为毫秒指定poll的超时时间。当为-1时poll将永远阻塞相当于卡住了没就绪就不返回直到发生某个事件当为0时poll将立即返回非阻塞大白话就是管你就不就绪立刻返回 返回值 成功返回就绪可读可写异常文件描述符总数在规定时间内没有就绪就返回0调用失败返回-1并设置errno如果在等待时间内接收到信号则立即返回-1并设置errno为EINTR。 struct pollfd 结构体 fd:你要监听的文件描述符。events:告诉poll你要监听fd上的那些事件。revent由内核修改通知应用程序fd上实际发生了那些事件。  poll事件监控类型 poll简单示例代码  #include poll.h#include fcntl.h#include sys/types.h#include stdio.h#include stdlib.h#include unistd.h#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \} while (0)int main(int argc, char *argv[]){int nfds, num_open_fds;struct pollfd *pfds;if (argc 2) {fprintf(stderr, Usage: %s file...\n, argv[0]);exit(EXIT_FAILURE);}num_open_fds nfds argc - 1;pfds (struct pollfd*)malloc(nfds*sizeof(struct pollfd));if (pfds NULL)errExit(malloc);/* Open each file on command line, and add it pfds array */for (int j 0; j nfds; j) {pfds[j].fd open(argv[j 1], O_RDONLY);if (pfds[j].fd -1){printf(111);errExit(open);}printf(Opened \%s\ on fd %d\n, argv[j 1], pfds[j].fd);pfds[j].events POLLIN;//注册可读事件}/* Keep calling poll() as long as at least one file descriptor isopen */while (num_open_fds 0) {int ready;printf(About to poll()\n);ready poll(pfds, nfds, -1);//ready poll(pfds, nfds, -1);if (ready -1)errExit(poll);printf(Ready: %d\n, ready);/* Deal with array returned by poll() */for (int j 0; j nfds; j) {char buf[10];if (pfds[j].revents ! 0) {printf( fd%d; events: %s%s%s\n, pfds[j].fd,(pfds[j].revents POLLIN) ? POLLIN : ,(pfds[j].revents POLLHUP) ? POLLHUP : ,(pfds[j].revents POLLERR) ? POLLERR : );if (pfds[j].revents POLLIN) {ssize_t s read(pfds[j].fd, buf, sizeof(buf));if (s -1)errExit(read);printf( read %zd bytes: %.*s\n,s, (int) s, buf);} else { /* POLLERR | POLLHUP */printf( closing fd %d\n, pfds[j].fd);if (close(pfds[j].fd) -1)errExit(close);num_open_fds--;}}}}printf(All file descriptors closed; bye\n);exit(EXIT_SUCCESS);} 上述代码我给的是一个文件test1由于代码里面时死循环并且文件一直都是可读的所以就一直循环最后ctrlc进行终止。但是你给个目录就只打印一次。 epoll系统调用 epoll是Linux特有的I/O复用函数。它在实现上和使用上与select,poll有很大的差异首先epoll使用一组函数来完成任务而不是单个的。 epoll把用户关心的事件放到内核事件表中而无需像select和poll那样每次调用都需要重复传入文件描述符或事件集。但epoll需要额外的文件描述符来标识唯一的内核事件表。 epoll_create #include sys/epoll.hint epoll_create(int size);参数 size现在不起作用提醒内核开多大空间 返回值 该函数返回的文件描述符将用作其他所有epoll系统调用的一个参数。 epoll_ ctl #include sys/epoll.hint epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);参数 epfd这个参数就是标识的内核事件表epoll_create的返回值。op指定操作类型        EPOLL_CTL_ADD添加fd上注册的事件        EPOLL_CTL_MOD修改fd上注册的事件        EPOLL_CTL_DEL删除fd上注册的事件fd要操作的文件描述符event指定事件他是epoll_event结构体指针类型。 struct epoll_event {__uint_tevents//epoll事件epoll_data_t data;//用户数据 }typedef struct union epoll_data {void*ptr;int fd;uint32 u32;uint64 u64; }epoll_data_t; epoll支持的事件类型和poll事件类型基本相同只需在poll事件类型的宏前面加E. epoll两个额外的事件类型EPOLLET和EPOLLONESHOT他们对于epoll的高效运作非常重要。 后面在介绍。  返回值 成返回0失败返回-1并设置errno. epoll_wait epoll系列函数主要调用接口它在一段超时时间内等待一组文件描述符。  #include sys/epoll.hint epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);参数 epfd就是epoll_create函数的返回值。timeout与poll函数的timeout含义相同单位毫秒。maxevents最多监听多少个事件他必须大于0。eventsepoll_wait函数如果检测到事件就将所有就绪的事件从内核时间表中复制到events指向的数组中。 返回值 成功返回就绪的文件描述符的个数失败返回-1并设置errno。  epoll简单的示例代码
http://www.hkea.cn/news/14322034/

相关文章:

  • dede图片网站模板网站建设需要的图片怎么弄
  • wordpress装多站点红铃铛网站建设
  • dw对网站建设有哪些作用安全的网站建设公司
  • 中心网站设计做网站后有人抢注关键词
  • 企业网站源码搭建搜索引擎营销总结
  • 网站开发前台怎么样建设全网营销型网站
  • 酒仙网技术开发与网站建设方面创意图片
  • 如何查询网站备案信息查询长春财经学院多大
  • 西部数码网站站点谷歌商店paypal三件套
  • 站内优化网站怎么做兰州市网站建设公司
  • 有没有做公章的网站百姓网二手买卖
  • 小网站建设山西企业模板建站信息
  • 北京做网站建设的公司排名编程语言排行榜
  • 江苏省建设培训网站什么是网站的栏目和板块
  • 马鞍山网站建设开发网页qq登录保护不让用
  • 网站备案 网站怎么把网站设置为信任网站
  • 做网站 做推广需要知道什么山东商祺网站建设优化
  • 常州企业免费建站找网站漏洞赚钱怎么做的
  • 如何获得网站济南地产行业网站开发
  • 站长之家 wordpress营销型网站是什么
  • 厦门网站建设方案维护河北中尊建设工程有限公司官方网站
  • 去哪找人做网站网站建设列表横向
  • 营销型企业网站有哪些类型东莞设计兼职网站建设
  • 吉林电商网站建设网站不做301可以吗
  • 建h5网站费用新鸿儒做网站
  • 北京正规网站建设经历网页制作教程第二版
  • 嘉兴网站搭建金诺网站建设
  • 城乡与建设厅网站首页大型购物网站有哪些
  • 如何优化网站打开速度门户网站建站流程
  • 自己做网站赚钱案例网站可以做哪些广告语