#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;

最新文章

  1. css3-columns多列布局
  2. Transactional Replication2:在Subscriber中,主键列是只读的
  3. 【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布
  4. Lucene 4.X 倒排索引原理与实现: (2) 倒排表的格式设计
  5. 内部通信服务Factory(WCF)
  6. 怎么利用C#中的 webclient 创建cookie
  7. Codeforces 367
  8. git设计哲学
  9. Android UI开发详解之ActionBar .
  10. A星算法
  11. Android操作HTTP实现和服务器通信
  12. Servlet--HttpServletResponse的2个操作流的方法
  13. JavaScript正则表达式函数总结
  14. day3 自定义指令详解
  15. java注解小随笔
  16. 我对领域驱动设计(DDD)的学习成果
  17. ECS之旅——常用的linux指令
  18. 【转载】webstorm忽略node_modules目录
  19. Page.TryUpdateModel 方法
  20. DPDK测试用例(sample)编译

热门文章

  1. CentOS7.2搭建LAMP环境
  2. MOOC C++笔记(一):从C到C++
  3. 25 个 Linux 下最炫酷又强大的命令行神器,你用过其中哪几个呢?
  4. 一个简单的jquery ajax表单提交 带数据校验 layer弹框提示
  5. 使用回车键执行input框事件
  6. Servlet防止盗链
  7. 2018年蓝桥杯java b组第七题
  8. SpringBootSecurity学习(08)网页版登录整合MyBatis
  9. 『TensorFlow2.0正式版』TF2.0+Keras速成教程&#183;零:开篇简介与环境准备
  10. 品Spring:对@Resource注解的处理方法