某些版本的 UNIX 提供了檢查某個 file descriptor 目前是否有東西待讀取的 方法。在 BSD 中,可以用 "select(2),也可以用 FIONREAD ioctl,檢查有幾 個字元等待讀取,不過這只對 terminal, pipe, 與 socket 有用。在 System V Release 3 中可以用 poll(2),不過只對 stream 有用。在 Xenix 與 Sys V r3.2 及其以後的版本裡,有一個名叫 rdchk() 的 system call 可以用來檢查 對一個 file descriptor 做 read() 會不會卡住。
沒有方法可以用來判斷是否有字元在 FILE pointer 中待讀取。(你可以直接查 看 stdio 的資料結構,看看是否 input buffer 是空的,但是這方法有時會失 效,因為你沒有辦法知道當你下一次要填滿這個 buffer 時會發生什麼事。)
有時人們問這個問題是因為想寫
if (characters available from fd) read(fd, buf, sizeof buf);以達成 nonblocking read。這不是一種好的做法,因為可能測的時候有東西, 要讀的時候,已經沒有東西可讀了。正確的做法應該是用 fcntl(2) 裡的 F_SETFL 設定 O_NDELAY。在一些比較舊的系統 (例如: Version 7, 4.1 BSD) 裡,並沒有 O_NDELAY 可用,就得用 alarm(2) 來設定 read 的 timeout,以達成近似 nonblocking read 的功能。