zoukankan      html  css  js  c++  java
  • I/O复用

    1、I/O模型  

    一个输入操作通常包括两个不同阶段:等待数据准备好;从内核到进程拷贝数据。

    阻塞I/O模型

    非阻塞I/O模型

    I/O复用模型:内核发现进程指定的一个或多个I/O条件就绪,它就通知进程,由select和poll两个函数支持

    信号驱动I/O模型:内核在描述字就绪时发送SIGIO信号通知进程

    异步I/O模型:让内核启动一个操作,并在整个操作完成后通知进程

    2、select函数

    #include <sys/select.h>

    #include <sys/time.h>

    int select (int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *expectset, const struct timeval *timeout)

    select函数指定一系列描述字,在一个描述字就绪或者等待指定时间后返回,返回所有已就绪的描述字个数

    参数timeout指定最长等待时间,为NULL时,函数将一直等待直到有描述子就绪

    参数readset、writeset和expectset指定让内核测试的读、写和异常条件描述字。这三个参数的类型时描述字集fd_set,可以

    通过下面4个宏来操作:

    void FD_ZERO (fd_set *fdset)

    void FD_SET (int fd,fd_set *fdset)

    void FD_CLR (int fd, fd_set *fdset)

    int FD_ISSET (int fd, fd_set *fdset)        //判断fdset描述字集中的fd描述字是否就绪

    select函数修改由readset、writeset和expectset所指向的描述字集,这三个参数是值-结果参数,调用函数时,指定所关心的描述字,

    返回时,指示就绪的描述字。因此,当重新调用select函数时,必须重新设置描述字集

    maxfdp1的值是最大描述字加1

    生活不止眼前的苟且 还有诗和远方的田野
  • 相关阅读:
    NOIP模拟 10
    无聊的 邮递员 插头dp
    类实例化对象可以访问静态(static)方法,但是不能访问静态属性。
    PHP——抽象类与接口的区别
    工厂模式
    win10 专业版 git bash 闪退问题终极解决方案
    git基本的使用原理
    排序算法-插入排序
    如何进行CodeReview
    php中的各种http报错的报错的状态码的分析
  • 原文地址:https://www.cnblogs.com/jc-nogame/p/4351870.html
Copyright © 2011-2022 走看看