Q我怎样才能知道是否有可读的字符(如果有,有多少)?或者,如何执行一个不会阻塞在没有可用字符的读取操作?
A这些也完全是特定于操作系统的。curses 的某些版本有一个nodelay函数。根据你的系统,你可能还可以使用“非阻塞 I/O”,或者一个名为select或poll的系统调用,或者 FIONREAD ioctl,或者c_cc[VTIME]或kbhit或rdchk,或者open或fcntl的 O_NDELAY 选项。你还可以尝试设置一个闹钟,让阻塞读取在一定间隔后超时(在 Unix 系统下,可以查看alarm, signal,也许还有setitimer).
如果你想做的是从多个源读取输入而不阻塞,你肯定想使用某种“select”调用,因为在多任务系统中,忙等待的轮询循环效率极低。
另请参阅问题 19.1。