加入收藏 | 设为首页 | 会员中心 | 我要投稿 唐山站长网 (https://www.0315zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

四个Pipeline脚本式与声明式语法差异

发布时间:2021-01-30 15:54:11 所属栏目:评论 来源:互联网
导读:该结构体指定了要异步操作的套接字描述符,操作过程中用到的缓冲,其中aio_sigevent告诉AIO在IO操作完成时,应该指向什么操作。 常见的异步IO相关函数如下: INT AIO_READ(STRUCT AIOCB *AIOCBP) 请求异步读操作,该函数将aiocbp指向的缓冲区描述的I/O请求排

该结构体指定了要异步操作的套接字描述符,操作过程中用到的缓冲,其中aio_sigevent告诉AIO在IO操作完成时,应该指向什么操作。

常见的异步IO相关函数如下:

INT AIO_READ(STRUCT AIOCB *AIOCBP)

请求异步读操作,该函数将aiocbp指向的缓冲区描述的I/O请求排队。

注意:aio_read的aiocbp中一定要设置偏移量

在传统的非异步read操作中,偏移量是在文件描述符上下文进行维护的,对于每个操作,偏移量都需要更新,以便后续的操作可以对下一块数据进行寻址。

而对于异步read操作来说,可以同时执行很多异步IO read操作,所以这里需要的指明处理的文件的偏移量aiocbp->aio_offset和异步读取的内容的长度aiocbp->aio_nbytes。

aio_read调用后,文件偏移量变为未设置。

INT AIO_WRITE(STRUCT AIOCB *AIOCBP)

请求异步写操作,该函数将aiocbp指向的缓冲区描述的I/O请求排队。

aio_write不一定要设置偏移量

如果打开的文件,设置了O_APPEND选项,那么偏移量就会被忽略,数据会被附加到文件的末尾;如果未设置O_APPEND,那么从aiocbp->aio_offset开始写入数据,而不考虑文件的偏移量。

SSIZE_T AIO_RETURN(STRUCT AIOCB *AIOCBP)

获取完成的异步请求的返回状态。

由于IO异步化了,需要有专门的函数来获取异步处理的状态。

aio_return的返回值即相当于read或write等系统调用的返回值。如果出错,则返回-1,并正确设置errno。

可能的响应值:

  • 成功后,将返回处理的字节数;
  • -1:发生错误,并且设置errno以指示错误原因;

只有在aio_error调用返回EINPROGRESS之外的值之后,才可以调用这个函数,并且只允许调用一次。

INT AIO_ERROR(CONST STRUCT AIOCB *AIOCBP)

检查异步请求的状态,可能的响应值:

  • EINPROGRESS:如果请求还没有完成;
  • ECANCELED:如果请求已经被取消;
  • 0:如果请求已完成;
  • 如果异步IO操作失败,则为一个正数的error number,与同步的read(2), write(2), fsync(2),或者 or fdatasync(2)系统的errorno一致。

AIO_SUSPEND

(编辑:唐山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读