最終更新:2018-01-12 (金) 19:43:37 (161d)  

select はてなブックマークを見る
Top / select

複数のディスクリプタをポーリングできる便利なシステムコール

https://linuxjm.osdn.jp/html/LDP_man-pages/man3/stdout.3.html

プログラムで複数のファイルディスクリプタを監視し、 一つ以上のファイルディスクリプタがある種の I/O 操作の 「ready (準備ができた)」状態 (例えば、読み込み可能になった状態) になるまで待つことができる

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

ファイルディスクリプタ

  • openで開いたもの

動作

  • 3 つの独立したファイルディスクリプター集合の監視を行う。
    • nfds は 3 つの集合に含まれるファイルディスクリプターの最大値に 1 を足したものである。
    • readfds に入れられたディスクリプターについては、読み込みが可能かどうかを 監視する
    • writefds に入れられたディスクリプターについては、書き込み用に利用可能な領域があるかを監視する
    • exceptfds にあるものについては、例外の監視を行なう。

ディスクリプタ集合の操作

  • FD_ZERO(fd_set *set);集合を消去
    FD_SET?(int fd, fd_set *set);集合への追加
    FD_CLR?(int fd, fd_set *set);集合からの削除
    FD_ISSET?(int fd, fd_set *set);集合にファイルディスクリプターがあるかどうか調べる

引数

  • timeval?
    struct timeval {
        long    tv_sec;         /* 秒 */
        long    tv_usec;        /* マイクロ秒 */
    };

ヘッダファイル

以前

POSIX.1-2001

  • sys/select.h?

実装

関連Linux/システムコール

FreeBSD

参考