前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Orace开源的异步IO编程库,特点是接口非常简单

Orace开源的异步IO编程库,特点是接口非常简单

作者头像
一见
发布2018-08-10 16:03:19
3460
发布2018-08-10 16:03:19
举报
文章被收录于专栏:蓝天蓝天蓝天
 官网:https://oss.oracle.com/projects/libaio-oracle/,正如标题所说,非常简单了,不用多解释,请直接看头文件,其中aio_poll类似于poll,重要的结构是aiocb64,类似于epoll_event。
 
 
 
 #ifndef _SKGAIO_H
  
 			#define _SKGAIO_H
 
 
 
 			#define IOCB_CMD_READ        0
 
 			#define IOCB_CMD_WRITE        1
 
 			#define IOCB_CMD_NOP        2
 
 			#define IOCB_CMD_CANCEL        3
 
 			#define IOCB_CMD_FSYNC        4
 
 			#define IOCB_CMD_FDSYNC        5
 
 			#define IOCB_CMD_RUNNING    6
 
 			#define IOCB_CMD_DONE        7
 
 
 
 /* Maximum number of events to retrieve at once */
 
 			#define MAX_EVENTS 512
 
 			#define MAX_AIO_REAP MAX_EVENTS
 
 
 
 			#include <stdlib.h>
 
 			#include <asm/unistd.h>
 
 			#include <linux/types.h>
 
 			#include <signal.h>
 
 /*
 
 * we always use a 64bit off_t when communicating
 
 * with userland. its up to libraries to do the
 
 * proper padding and aio_error abstraction
 
 *
 
 * FIXME: this must change from glibc's definition
 
 * as we do *not* use the sigevent structure which
 
 * is big and bloated.
 
 */
 
 			struct aiocb64 {
 
 int aio_fildes; /* File desriptor. */
 
 			  short aio_lio_opcode; /* Operation to be performed. */
 
 			  short aio_reqprio; /* Request priority offset. */
 
 			  void *aio_buf; /* Location of buffer. */
 
 			  size_t aio_nbytes; /* Length of transfer. */
 
 			  loff_t aio_offset; /* File offset. */
 
 /* these are internal to the kernel/libc. */
 
 			  long __aio_key; // kernel sets this to -1 if completed
 
 // otherwise >= 0 (the request#)
 
 			  void * __aio_data; // pointer to be returned in event's data 
 
 int __error_code;
 
 };
 
 
 
 
 
 
 
 			#ifdef DEBUG
 
 			#define dbg_printf(fmt,arg...)\
 
 			    printf(fmt, ##arg)
 
 			#else
 
 			#define dbg_printf(fmt,arg...)\
 
 do { } while(0);
 
 			#endif
 
 
 
 
 
 			#define aiocb         aiocb64
 
 			#define aio_read     aio_read64
 
 			#define aio_write     aio_write64
 
 			#define aio_poll     aio_poll64
 
 			#define aio_error     aio_error64
 
 			#define aio_return     aio_return64
 
 			#define aio_cancel     aio_cancel64
 
 			#define aio_suspend     aio_suspend64
 
 			#define    lio_listio    lio_listio64 
 
 			#define aio_reap        aio_reap64
 
 
 
 
 
 /* Initialize async i/o with the given maximum number of requests */
 
 int aio_init(int max_requests);
 
 
 
 /* Enqueue read request for given number of bytes and the given priority. */
 
 int aio_read64(struct aiocb64 *aiocbp);
 
 
 
 /* Enqueue write request for given number of bytes and the given priority. */
 
 int aio_write64(struct aiocb64 *aiocbp);
 
 
 
 /* Enqueue a poll request for a given fd. */
 
 int aio_poll64(struct aiocb64 *aiocbp);
 
 
 
 /*
 
 * Returns the status of the aiocb.
 
 * If the operation is incomplete, the return value is undefined
 
 * < -1 is -errno for the call.
 
 * >= -1 is the return code of the completed operation
 
 */
 
 			ssize_t aio_return64(struct aiocb64 *aiocbp);
 
 
 
 /*
 
 * Returns the error status of the aiocb.
 
 * < 0 is -errno for the call.
 
 * 0 is successfully complete
 
 * EINPROGRESS is not complete at all.
 
 * > 0 is errno for unsuccessful completion.
 
 */
 
 int aio_error64(struct aiocb64 *aiocbp);
 
 
 
 /*
 
 * Try to cancel asynchronous I/O requests outstanding against file
 
 * descriptor FILDES.
 
 */
 
 int aio_cancel64 ( int fildes, struct aiocb64 *aiocbp);
 
 
 
 /*
 
 * Suspend calling thread until at least one of the asynchronous I/O
 
 * operations referenced by LIST has completed.
 
 */
 
 int aio_suspend64(const struct aiocb64 * const list[],int nent,
 
 const struct timespec *timeout); 
 
 
 
 /*
 
 * Suspend calling thread until waitfor asynchronouse I/O operations
 
 * outstanding have completed.
 
 */
 
 int aio_reap64(struct timespec *timeout, int waitfor,
 
 			               struct aiocb *out_list[], int listsize,
 
 int *completed_count);
 
 
 
 
 
 int lio_listio64(int mode, struct aiocb64 * const list[], int nent,
 
 			                 struct sigevent *__restrict __sig); 
 
 
 
 /* Operation codes for `aio_lio_opcode'. */
 
 			enum
 
 {
 
 			    LIO_READ,
 
 			#define LIO_READ LIO_READ
 
 			    LIO_WRITE,
 
 			#define LIO_WRITE LIO_WRITE
 
 			    LIO_NOP,
 
 			#define LIO_NOP LIO_NOP
 
 			    LIO_POLL,
 
 			#define LIO_POLL LIO_POLL
 
 };
 
 
 
 /* Return values of cancelation function. */
 
 			enum
 
 {
 
 			    AIO_CANCELED,
 
 			#define AIO_CANCELED AIO_CANCELED
 
 			    AIO_NOTCANCELED,
 
 			#define AIO_NOTCANCELED AIO_NOTCANCELED
 
 			    AIO_ALLDONE
 
 			#define AIO_ALLDONE AIO_ALLDONE
 
 };
 
 
 
 
 
 /* Synchronization options for `lio_listio' function. */
 
 			enum
 
 {
 
 			    LIO_WAIT,
 
 			#define LIO_WAIT LIO_WAIT
 
 			    LIO_NOWAIT
 
 			#define LIO_NOWAIT LIO_NOWAIT
 
 };
 
 
 
 			#endif /* _SKGAIO_H */ 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-04-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档