aio是linux上的异步IO实现,具体测试代码如下:
aiocb ab; bzero( (char *)&ab, sizeof(struct aiocb) ); int fd = open("a.txt", O_RDWR | O_APPEND); ab.aio_buf = malloc(201); ab.aio_fildes = fd; ab.aio_nbytes = 20; ab.aio_offset = 0; int r = aio_read(&ab); std::cout << "return:" << r << std::endl; std::cout << "buff:" << (char *)ab.aio_buf << std::endl; r = aio_return(&ab); std::cout << "return:" << r << std::endl; char *b = "good boy!!"; ab.aio_buf = b; aio_write(&ab);关键点在于,struct aiocb结构体的填充。
aio通知机制:
信号 ab.aio_sigevent.sigev_notify = SIGEV_SIGNAL;
ab.aio_sigevent.sigev_signo = SIGIO;
ab.aio_sigevent.sigev_value.sival_ptr = &ab;
线程
acb.aio_sigevent.sigev_notify = SIGEV_THREAD;
acb.aio_sigevent._sigev_un._sigev_thread._function = rw;
acb.aio_sigevent._sigev_un._sigev_thread._attribute = NULL;
acb.aio_sigevent.sigev_value.sival_ptr = &acb;可能因为不同版本的头文件提供的接口有所不同,网上有些资料说的是acb.aio_sigevent.notify_function,但我在实际应用中没有找到他的定义。
1041

被折叠的 条评论
为什么被折叠?



