非同期通信その2
入出力の多重化
プロセス間通信を行うには、ソケットのディスクリプタ(ソケット番号と呼んでもいい気が)を通じて行います。どのディスクリプタからデータが読めるかを管理するものとして、「fd_set」と呼ばれるデータ構造(ビットマスク)が用意されています。ディスクリプタを通じて非同期に入力するには、このビットマスクで使用したいディスクリプタを指定して、select関数を呼び出します。
- 「fd_set」関連の定義位置
sys/types.h内 - 「fd_set」
各ビットがディスクリプタに対応しています。例えば、ディスクリプタ「3」にはビット3が対応します。 - 「fd_set」ビットマスク操作マクロ
- select関数の呼び出し
- FD_SET()で有効にしたいディスクリプタを指定します
- select(n, p, NULL, NULL, NULL)を呼び出します
nは有効ビット幅の指定、第3,4,5引数はとりあえずNULLとします。 - select関数を呼ぶと、ビットマスクの内容は壊れてしまうため、selectを呼ぶときにはテンポラリのビットマスクにコピーしてから呼び出すのが常套手段です。
今日はここまで。
いかん、全然進まん(^^;