2

AIO完了通知(スレッドまたはシグナルを介して行われるかどうかに関係なく)は、どの要求が完了したかについての情報を提供しないと私は考えていますか?リクエストごとに個別のコールバック関数を呼び出す以外に、この相関関係を実現する方法はありますか?表面上は、元のリクエストのaiocb構造を使用して、aio_errorおよびaio_returnを呼び出すことができますが、通知コールバックの一部としてaiocb構造へのポインターを取得することはできません。なぜこれを行うメカニズムがないように見えるのですか?

4

1 に答える 1

2

を送信して非同期IOを開始すると、そのメンバーに次の構造struct aiocbを入力できます。aio_sigeventstruct 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 aiocbstruct aiocb

si->si_value.sival_ptr;

aio(7)マンページはこれを調査するときに非常に役立ち、マンページには構造sigevent(7)の詳細があります。struct sigevent

于 2011-12-09T23:40:24.073 に答える