ALSA:非同期

snd_async_add_handler非同期ハンドラを追加
snd_async_del_handler非同期ハンドラを削除
取得
snd_async_handler_get_fd関連付けられた fd を返す
snd_async_handler_get_signoシグナル番号を返す
snd_async_handler_get_callback_private関連付けられたプライベートデータを返す
int snd_async_add_handler(snd_async_handler_t **handler, int fd, snd_async_callback_t callback, void *private_data);

typedef void (*snd_async_callback_t)(snd_async_handler_t *handler);
非同期ハンドラを追加。

コールバック関数を、指定された fd に関連付け、この関連付けを snd_async_handler_t オブジェクトに保存する。
fd に対して SIGIO シグナルが発生するたびに、コールバック関数が呼び出される。

SIGIO シグナルの ALSA sigaction ハンドラは、登録された非同期コールバックへの通知を自動的に多重化する。
ただし、デバイスドライバに SIGIO シグナルを生成するように指示するのは、アプリケーションの役割。

SIGIO シグナルは、別のシグナルに置き換えられている可能性がある。
戻り値
0 で成功、負の値でエラーコード
int snd_async_del_handler(snd_async_handler_t *handler);
非同期ハンドラを削除
戻り値
0 で成功、負の値でエラーコード
取得
int snd_async_handler_get_fd(snd_async_handler_t *handler);
関連付けられた fd を返す
戻り値
成功時は fd。負の値でエラーコード
int snd_async_handler_get_signo(snd_async_handler_t *handler);
シグナル番号を返す。
非同期ハンドラのシグナル番号は通常 SIGIO だが、ALSA ライブラリをコンパイルするときに、これをリアルタイムシグナルに再定義できる。
戻り値
成功時はシグナル番号。負の値でエラーコード
void *snd_async_handler_get_callback_private(snd_async_handler_t *handler);
関連付けられたプライベートデータを返す