LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 920|回复: 0

如何实现异步IO读写???

[复制链接]
发表于 2009-12-3 13:46:22 | 显示全部楼层 |阅读模式
代码功能是实现异步的读写文件中的数据
将源文件和目标文件通过参数传递给主程序 然后实现异步的读写 但是在执行到aio_read(&new_act)时就出现如下错误:
Program received signal SIG34, Real-time event 34

不知道这个信号指的是什么意思?
恳请大家帮忙指点!
谢啦!!

代码如下:
/*获取源文件和目标文件文件描述符*/
if ((fd1=open(argv[1],O_RDWR))==-1) {
                fprintf(stderr,"Failed to open %s: %s",argv[1],strerror(errno));
                return 1;
}

        if ((fd2=open(argv[2],O_RDWR))==-1) {
                fprintf(stderr,"Failed to open %s",argv[2]);
                return 1;
}

/*为读完和写完两种信号设定其对应的信号处理函数*/
  struct sigaction newact;
        newact.sa_sigaction=aiordhandler;
        newact.sa_flags=0;
        if((sigemptyset(&newact.sa_mask)==-1)||(sigaction(signo1,&newact,NULL)==-1))
                return -1;
        newact.sa_sigaction=aiowthandler;
        if(sigaction(signo2,&newact,NULL)==-1)
                return -1;

/*设置读写的异步IO的结构体属性*/
                aiocb1.aio_fildes=fdread;
                aiocb1.aio_offset=0;
                aiocb1.aio_buf=(void *)buf;
                aiocb1.aio_sigevent.sigev_notify=SIGEV_SIGNAL;
                aiocb1.aio_sigevent.sigev_signo=signo2;
                aiocb1.aio_sigevent.sigev_value.sival_ptr=&aiocb1;
                fdout=fdwrite;
               
                aiocb2.aio_fildes=fdwrite;
                aiocb2.aio_offset=0;
                aiocb2.aio_buf=(void *)buf;
                aiocb2.aio_sigevent.sigev_notify=SIGEV_SIGNAL;
                aiocb2.aio_sigevent.sigev_signo=signo1;
                aiocb2.aio_sigevent.sigev_value.sival_ptr=&aiocb2;
                fdin=fdread;
               
   /*开始读写*/
             aio_read(&aiocb1)
               
/*以下是读写异步信号的信号处理函数*/
static void aiowthandler(int signo2, siginfo_t *info, void *context) {
       serrno=errno;
     if (error=aio_write(&aiocb2))
                seterror(errno);
        errno=serrno;
}

static void aiordhandler(int signo1, siginfo_t *info, void *context) {
       serrno=errno;
     if (error=aio_write(&aiocb1))
                seterror(errno);
        errno=serrno;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表