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

概念理解-异步IO的更多相关文章

  1. Python(3)---从迭代器到异步IO

    whenif 关注 2017.02.13 23:48* 字数 1750 阅读 250评论 0喜欢 8 目录 1. 迭代(iteration)与迭代器(iterator) 1.1 构建简单迭代器 1.2 ...

  2. 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

    转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...

  3. node中异步IO的理解

    解释性语言和编译型语言的区别: 计算器不能直接的理解高级语言,只能理解机器语言,所以必须把高级语言翻译为机器语言,翻译的方式有两种,一个是编译,一个是解释. 解释性语言的程序不需要编译,它是在运行程序 ...

  4. 深入理解非阻塞同步IO和非阻塞异步IO

    这两篇文章分析了Linux下的5种IO模型 http://blog.csdn.net/historyasamirror/article/details/5778378 http://blog.csdn ...

  5. 小白对异步IO的理解

    前言 看到越来越多的大佬都在使用python的异步IO,协程等概念来实现高效的IO处理过程,可是我对这些概念还不太懂,就学习了一下. 因为是初学者,在理解上有很多不到位的地方,如果有错误,还希望能够有 ...

  6. C# 同步和异步(概念理解)

    C#  同步和异步 IO 概念区分 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( Nonblocking) 同步异步图解 ...

  7. 伪异步IO理解

    伪异步IO实在堵塞IO的基础上将每个client发送过来的请求由新创建的线程来处理改进为用线程池来处理.因此避免了为每个client请求创建一个新线程造成的资源耗尽问题. 来看一下伪异步IO的服务端代 ...

  8. 异步IO的概念

    同步IO是阻塞IO: 异步IO分为两种:1.主动查询是否有数据:2.被动监听是否有数据状态. https://www.cnblogs.com/euphie/p/6376508.html

  9. python IO模式(多路复用和异步IO深入理解)

    1.事件渠道模型.事件渠道为异步IO的原型. 2.IO模式,一次IO调用会经历两个阶段.一.等待数据阶段,将数据从网络或者是磁盘读取到系统内核(kennel) 二.将数据从内核拷贝到进程中. 基于这两 ...

随机推荐

  1. F#周报2019年第38期

    新闻 宣告.NET Core 3.0第一个候选版本 .NET Core 3.0第一个候选版本中ASP.NET Core与Blazor的更新 F#的就业市场情形如何 Finalization实现细节 G ...

  2. HTML定位和布局----float浮动

    1.定位体系一共有三种 (1)常规流: (2)浮动定位 (3)绝对定位 2.float属性常用的语法: (1)float:left:左浮动 (2)float:right:右浮动 (3)float:no ...

  3. librosa语音信号处理

    librosa是一个非常强大的python语音信号处理的第三方库,本文参考的是librosa的官方文档,本文主要总结了一些重要,对我来说非常常用的功能.学会librosa后再也不用用python去实现 ...

  4. Anaconda基本认识

    Anaconda Distribution是执行Python数据科学和机器学习最简单的方法. 它包括250多种流行的数据科学软件包,以及适用于Windows,Linux和MacOS的conda软件包和 ...

  5. Android类似日历的翻转控件

    最近写了个翻转面板的控件拿出来与大家分享一下,类似日历的那种,写的比较简单有需要的可以直接拿去用.直接上效果图吧,代码我放在百度云了,有问题的话直接回复就好呢,大家一起交流下. http://pan. ...

  6. 服务器配置https协议,三种免费的方法

    最近想搞一个网站玩玩,发布网站用https协议已经是大势所趋了.例如微信小程序,不使用https协议根本不让接入.所以,分享一下我尝试过的三种方法. 1.Linux自签(OPENSSL生成SSL自签证 ...

  7. 关于ajax提交表单的一些实例及遇到的问题和解决办法

    ajax提交的表单有两种情况: 第一种:input type类型没有file上传文件类型的表单 第二种:input type类型有file上传文件类型的表单 之所以分为两种:是因为原生ajax是不能提 ...

  8. JavaEE——JSP开发模式(model1)

    model1开发模式 工作流程: ①浏览器请求,JSP页面接收 ②JSP根据请求和JavaBean进行交互 ③JavaBean进行业务处理,JDBC操纵数据库 ④JSP将请求结果返回浏览器页面 利用m ...

  9. python编程基础之二

    交互式: 此处以windows为例:开始->运行->cmd,输入python 交互式界面 优点:即时,所见即所得 缺点:代码不可复用,根本无法进行维护 退出:exit() 代码是顺序执行: ...

  10. C# 创建自定义配置节点1

    转载:http://www.educity.cn/develop/495003.html 在.Net应用程序中我们经常看到VS为我们生成的项目工程中都会含有app.config或者web.connfi ...