首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

linux AIO 读资料实例

2013-08-06 
linux AIO 读文件实例AIO读操作,使用系统调用实现#define BUFSIZE 1024#include stdio.h#include stdli

linux AIO 读文件实例

AIO读操作,使用系统调用实现
#define BUFSIZE 1024#include <stdio.h>#include <stdlib.h>#include <aio.h>#include <errno.h>#include <unistd.h>#include <string.h>int main(void) {int fd, ret;struct aiocb my_aiocb;fd = open("file.txt", O_RDONLY);if (fd < 0)perror("open");/* Zero out the aiocb structure (recommended) */bzero((char *) &my_aiocb, sizeof(struct aiocb));/* Allocate a data buffer for the aiocb request */my_aiocb.aio_buf = malloc(BUFSIZE + 1);if (!my_aiocb.aio_buf)perror("malloc");/* Initialize the necessary fields in the aiocb */my_aiocb.aio_fildes = fd;my_aiocb.aio_nbytes = BUFSIZE;my_aiocb.aio_offset = 0;ret = aio_read(&my_aiocb);if (ret < 0)perror("aio_read");/** aio_error return value : EINPROGRESS,说明请求尚未完成 ECANCELLED,说明请求被应用程序取消了 -1,说明发生了错误,具体错误原因可以查阅 errno.h */while (aio_error(&my_aiocb) == EINPROGRESS);if ((ret = aio_return(&my_aiocb)) > 0) {/* got ret bytes on the read */      int n = my_aiocb.aio_nbytes; //length               char *p0=(char *)my_aiocb.aio_buf; //返回字符               printf("p0 is %s\n",p0);puts("!read success!!!");printf("buffersize is %d,real byte size is %d", n, ret);} else {/* read failed, consult errno */puts("!!!read fail!!");}return 0;}

?

?

这样建立一个测试文件,就可以异步读取了,使用gcc编译的时候注意链接动态库librt编译命令如下:

gcc -o myaio ?myaio.c /lib/librt.so.1

librt.so.1为我的rt动态链接库,在/lib目录下

热点排行