aio_read

aio_read()というのは非同期にreadするという関数です。普通のreadは一定のデータを読み終わるまで戻ってこないんですが、こいつは即座に戻ってきます。

したがって、戻ってきた直後はデータがない可能性もあるわけですが、その間ベツな処理をあらかじめしておいて、その後に読んだデータの処理をすることができます・・・というような関数なのでしょう。

これが使い道があるのかどうかはおいといて、調査する必要が出てきたので、軽くFreeBSDで調査をしてみました。

まずは、カンタンなサンプルを作成して実行してみました。

するとENOSYSというエラーが。つまり、サポートされていないと・・・

うーむとばかりにカーネルソースをみてみたら、VFS_AIOが定義されていないときは、全てエラーとなるようにコーディングされてました。

というわけで、早速

options VFS_AIO

を追加してカーネル再コンパイル。無事動きました。ソースがあるって素敵ですね。ふぅ

って本来の目的は全然進んでないやん・・・・