AIO完了通知(スレッドまたはシグナルを介して行われるかどうかに関係なく)は、どの要求が完了したかについての情報を提供しないと私は考えていますか?リクエストごとに個別のコールバック関数を呼び出す以外に、この相関関係を実現する方法はありますか?表面上は、元のリクエストのaiocb構造を使用して、aio_errorおよびaio_returnを呼び出すことができますが、通知コールバックの一部としてaiocb構造へのポインターを取得することはできません。なぜこれを行うメカニズムがないように見えるのですか?
1 に答える
2
を送信して非同期IOを開始すると、そのメンバーに次の構造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
于 2011-12-09T23:40:24.073 に答える