• 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

    生活不止眼前的苟且 还有诗和远方的田野
  • 相关阅读:
    Eclipse 快捷键
    计算机网络之读Internet网发展史 读后感
    计算机网络之读Internet网发展史 读后感
    动态加载布局的技巧
    二、JSP的3个编译指令,7个动作指令,9个内置对象
    【杭电】[2050]折线分割平面
    【杭电】[2050]折线分割平面
    【杭电】[2068]RPG的错排
    【杭电】[2068]RPG的错排
    【杭电】[4500]小Q系列故事——屌丝的逆袭
  • 原文地址:https://www.cnblogs.com/jc-nogame/p/4351870.html
Copyright © 2020-2023  润新知