同步IO表示任务必须等待I/O操作,异步IO时,程序可以在下达I/O操作后继续运行,这消除了同步I/O的一些不必要的等待
/**
* 异步I/O的使用
*/
#include<taskLib.h>
#include<stdio.h>
#include<unistd.h>
#include<pipeDrv.h>
#include<ioLib.h>
#include<selectLib.h>
#include<aio.h>
#define TASK_PRIORITY 125
#define TASK_PRIORITY_TWO 130
#define STACK_SIZE 225
#define PIPENAME "/pipe/p"
#define MSGCOUNT 10
#define MSGSIZE 255
/*任务A*/
void taskA(void);
/*任务ID*/
int taskId_A;
/*管道1,2的文件描述符*/
int fd;
int taskDemo() {
char buf[255];
int len,rfd;
struct timeval val;
struct aiocb readAio;
/*创建任务:taskSpawn创建并激活任务*/
taskId_A=taskSpawn("taskA", TASK_PRIORITY, VX_FP_TASK, STACK_SIZE,
(FUNCPTR)taskA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
if (taskId_A==ERROR)
printf("taskA taskSpawn() failed!\n");
/*创建管道,并打开*/
pipeDevCreate(PIPENAME,MSGCOUNT,MSGSIZE);
fd=open(PIPENAME,O_RDWR,0);
/*初始化读取AIO块*/
bzero((char *)&readAio,sizeof(struct aiocb));
readAio.aio_fildes=fd;
readAio.aio_buf=buf;
readAio.aio_nbytes=225;
readAio.aio_reqprio=0;
/*异步读取*/
aio_read(&readAio);
while(1)
{
printf("TaskDemo runing...\n");
if(aio_error(&readAio)==OK)
{
printf("Get messag:%s",buf);
aio_return(&readAio);
close(fd);
break;
}
sleep(1);
}
}
/*5s后向pipe写入信息*/
void taskA() {
char msg[]="hello";
sleep(5);
printf("write to Pipe!\n");
write(fd,msg,sizeof(msg));
}