概念理解-异步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;

 

posted @ 2018-11-19 23:10  osbreak  阅读(252)  评论(0编辑  收藏  举报