|
代码功能是实现异步的读写文件中的数据
将源文件和目标文件通过参数传递给主程序 然后实现异步的读写 但是在执行到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;
} |
|