ファイルディスクリプタに対して、読み書き可能かどうかを即時チェックする関数です。
int isReadable(int fd) {
fd_set fdset;
struct timeval t = {0, 0};
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
return select(fd + 1, &fdset, NULL, NULL, &t) > 0;
}
int isWritable(int fd) {
fd_set fdset;
struct timeval t = {0, 0};
FD_ZERO(&fdset);
FD_SET(fd , &fdset);
return select(fd + 1, NULL, &fdset, NULL, &t) > 0;
}
戻り値は読み書き可能なら 1 が、そうでなければ 0 が返ります。
もともとソケット用に作った関数ですが、引数はファイルディスクリプタなので UNIX ならデバイスなども対象に含まれます。