zoukankan      html  css  js  c++  java
  • 概念理解-异步IO

    #include <aio.h>
    
    
    /*
    函数名 :int aio_write(struct aiocb *aiocbp) 
    参  数 :struct aiocb *aiocbp   
    返回值 :执行成功返回0,出错返回-1,并设置errno的值
    说  明 :请求对一个有效的文件描述符进行异步读操作,
            这个文件描述符可以表示一个文件、套接字甚至管道
    */
    int aio_write(struct aiocb *aiocbp);
    
    /*
    函数名 :int aio_read(struct aiocb *aiocbp) 
    参  数 :struct aiocb *aiocbp   
    返回值 :执行成功返回0,出错返回-1,并设置errno的值
    说  明 :请求对一个有效的文件描述符进行异步写操作,
             这个文件描述符可以表示一个文件、套接字甚至管道
    */
    int aio_read(struct aiocb *aiocbp);
    
    
    /*
    函数名 :int aio_error(struct aiocb *aiocbp) 
    参  数 :struct aiocb *aiocbp   
    返回值 :EINPROGRESS:说明请求尚未完成
            ECANCELLED:说明请求被应用程序取消
    说  明 :被用来确定请求状态
    */
    int aio_error(struct aiocb *aiocbp); 
    /*
    函数名 :int aio_return(struct aiocb *aiocbp) 
    参  数 :struct aiocb *aiocbp   
    返回值 :
    说  明 :1、异步I/O和标准I/O方式之间的另外一个区别是:不能立即访问这个函数的返回状态,
            因为异步I/O并没有阻塞在read()调用上。
            2、在标准的read调用中返回状态时:在该函数返回时提供的
            3、但是在异步I/O中,我们要使用aio_return函数
    */
    ssize_t aio_return(struct aiocb *aiocbp); 
    
    
      
      
    /*
    函数名 :int aio_suspend(const struct aiocb *const list[],int nent,const struct timespec *timeout); 
    参  数 :struct aiocb *aiocbp   
    返回值 :
    说  明 :挂起调用进程直到IO完成或时间到期
            用户可以使用aio_suspend()函数来挂起或阻塞掉用进程,直到异步请求完成为止,
            此时产生一个信号,或者在发生其他超时操作时会导致aio_suspend()返回
    */
    int aio_suspend(const struct aiocb *const list[],int nent,const struct timespec *timeout); 
    
      
     
    /*
    函数名 :int aio_cancel(int fd,struct aiocb *aiocbp);
    参  数 :struct aiocb *aiocbp   
    返回值 :
    说  明 :允许用户取消对某个文件描述符执行的一个或所有的I.O请求
            用户需要提供一个aiocb指针,如果这个请求被成功取消,
            1、那么这个函数就会返回AIO_CANCELED,
            2、如果请求完成,此函数就会返回AIO_TCANCELED
            3、aiocbp参数设置为NULL,如果所有的请求都被取消了,这个函数将返回AIO_CANCELED,
            4、如果至少有一个请求被取消,那么这个函数就会返回AIO_NOT_CANCELED
            5、如果一个也没被取消就会返回AIO_ALLODNOE
    */
    int aio_cancel(int fd,struct aiocb *aiocbp);
    
     
    
    
    /*
    函数名 :int lio_listio(int mode,struct aiocb *restrict const list[restrict],int nent,struct sigevent *restrict notification);
    参  数 :int mode    -- mode参数可以是LIO_WAIT或LIO_NOWAIT
                        -- LIO_WAIT会阻塞这个调用,直到所有的I/O都完成为止
                        -- LIO_NOWAIT立即返回
    参  数 :list        -- aiocb的引用列表
    参  数 :nent        -- 最大元素个数
    返回值 :正在进行IO操作返回EINPROGRESS
    说  明 :
    */
    int lio_listio(int mode,struct aiocb *restrict const list[restrict],int nent,struct sigevent *restrict notification);
    
     
    struct aiocb{
         int aio_filds;         //要被读写的fd
         off_t aio_offset;      //读写操作对应的内存buffer
         volatile void *aio_buf;//读写操作对应的文件偏移 
         size_t aio_nbytes;     //需要读写的字节长度 
         int aio_reqprio;       //请求的优先级
         struct sigevent aio_sigevent; //异步事件,定义异步操作完成时的通知信号或回调函数
         int aio_lio_opcode;
    };
    struct sigevent{
         union sigval sigev_value;
         int sigv_signo;
         int sigev_notify;//异步事件的通知类型 SIGEV_NONE(不通知)、SIGEV_SIGNAL(生成信号)、SIGEV_THREAD(执行sigev_notify_function指定的函数)
         void (*sigev_notify_function) (union sigval);
         pthread_attr_t *sigev_notify_attrbutes;
  • 相关阅读:
    搭建高可用mongodb集群—— 副本集
    搭建高可用mongodb集群(一)——mongodb配置主从模式
    单线程异步回调机制的缺陷与node的解决方案
    js实现接口的几种方式
    访问者模式和php实现
    策略模式和php实现
    状态模式和php实现
    观察者模式和php实现
    C语言之一般树
    电子相册之bitmap
  • 原文地址:https://www.cnblogs.com/osbreak/p/9986454.html
Copyright © 2011-2022 走看看