aio.c
#include <stdio.h>
#include <libaio.h>
#include <sys/stat.h>
#include <fcntl.h>
#define error() printf("error [%s : %d]\n", __FILE__, __LINE__)
#define BUFF_SIZE 51
#define BUFF_CNT 50
/*
* 异步读取BUFF_CNT次__FILE__文件,每次大小为BUFF_SIZE,并输出
* 本代码只是aio用法的demo,aio实际运用在网络数据读写等需要异步操作的地方
*
* 本demo使用libaio库
* 也可以通过syscall直接调用io_setup/io_submit/io_getevents/io_destroy系统调用
*
* 由于io_submit后,kernel会尝试读数据,只有失败后才会放到work_queue中异步retry,所以本demo读出了源文件的所有数据
*/
int main(int argc, char *argv[])
{
int err;
io_context_t ctx;
struct iocb iocbs[BUFF_CNT];
struct iocb *iocbps[BUFF_CNT];
char buff[BUFF_CNT][BUFF_SIZE];
struct io_event events[BUFF_CNT];
int fd;
struct stat stat;
int i, cnt;
fd = open(__FILE__, O_RDONLY);
if (fd == -1) {
error();
return -1;
}
err &