Когда вы отправляете struct aiocb
для запуска асинхронного ввода-вывода, вы можете заполнить его 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
.