我是否认为 AIO 完成通知(无论是通过线程还是信号完成)没有提供有关哪个请求已完成的信息?除了为每个请求调用单独的回调函数之外,还有什么方法可以实现这种关联?从表面上看,您可以使用原始请求的 aiocb 结构来调用 aio_error 和 aio_return,但作为通知回调的一部分,您不会得到指向 aiocb 结构的指针。为什么似乎没有机制可以做到这一点?
问问题
494 次
1 回答
2
当您提交struct aiocb
启动异步 IO 时,您可以使用结构填充其aio_sigevent
成员struct sigevent
:
struct sigevent {
int sigev_notify; /* Notification method */
int sigev_signo; /* Notification signal */
union sigval sigev_value; /* Data passed with
notification */
/* ... */
}
union sigval { /* Data passed with notification */
int sival_int; /* Integer value */
void *sival_ptr; /* Pointer value */
};
使用aio_sigevent.sigev_value.sival_ptr
您可以存储指向您的struct aiocb
(或具有您struct aiocb
作为成员的另一个结构)的指针,然后您可以在调用信号处理程序时查找该指针:
si->si_value.sival_ptr;
aio(7)
手册页在研究这一点时非常有帮助,并且sigevent(7)
手册页包含有关struct sigevent
结构的详细信息。
于 2011-12-09T23:40:24.073 回答