Linux(程序设计):62---定时机制之I/O复用系统调用的超时参数

从来好事天生俭,自古瓜儿苦后甜。这篇文章主要讲述Linux(程序设计):62---定时机制之I/O复用系统调用的超时参数相关的知识,希望能为你提供帮助。

  • select系统调用,参见文章:javascript:void(0)
  • poll系统调用,参见文章:javascript:void(0)
  • epoll系统调用,参见文章:javascript:void(0)
一、I/O复用系统调用的超时参数
  • Linux下的3组I/O复用系统调用都带有超时参数,因此它们不仅能统一处理信号和I/O事件,也能统一处理定时事件。
  • 但是由于I/O复用系统调用可能在超时时间到期之前就返回(有I/O事件发生),所以如果要利用它们来定时,就需要不断更新定时参数以反映剩余的时间
二、代码演示案例
#define TIMEOUT 5000int main() { int timeout=TIMEOUT; time_t start=time(NULL); time_t end=time(NULL); while(1) { printf("the timeout is now %d mil-seconds\\n",timeout); start=time(NULL); int epoll_ret_value=https://www.songbingjia.com/android/epoll_wait(epollfd,events,MAX_EVENT_NUM,timeout); //epoll_wait函数出错 if((epoll_ret_value< 0)& & (errno!=EINTR)){ printf("epoll failure"); break; }/*如果epoll_wait返回0,说明超时时间到了, 那么便可处理定时任务,并重置定时时间*/ if(epoll_ret_value=https://www.songbingjia.com/android/=0){ timeout=TIMEOUT; continue; }end=time(NULL); /*如果epoll_wait的返回值大于0,则本次epoll_wait调用持续 的时间是(end-start)*1000ms,我们需要将定时时间timeout减 去这段时间,以获得下次epoll_wait调用的超时参数*/ timeout-=(end-start)*1000; /*重新计算之后的timeout值有可能等于0,说明本次epoll_wait调用返回时, 不仅有文件描述符就绪,而且其超时时间也刚刚好, 此时我们也要处理定时任务,并重置定时时间*/ if(timeout< =0) timeout=TIMEOUT; } }

【Linux(程序设计):62---定时机制之I/O复用系统调用的超时参数】

    推荐阅读