prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 19.2

Q我怎样才能知道是否有可读的字符(如果有,有多少)?或者,如何执行一个不会阻塞在没有可用字符的读取操作?


A这些也完全是特定于操作系统的。curses 的某些版本有一个nodelay函数。根据你的系统,你可能还可以使用“非阻塞 I/O”,或者一个名为selectpoll的系统调用,或者 FIONREAD ioctl,或者c_cc[VTIME]kbhitrdchk,或者openfcntl的 O_NDELAY 选项。你还可以尝试设置一个闹钟,让阻塞读取在一定间隔后超时(在 Unix 系统下,可以查看alarm, signal,也许还有setitimer).

如果你想做的是从多个源读取输入而不阻塞,你肯定想使用某种“select”调用,因为在多任务系统中,忙等待的轮询循环效率极低。

另请参阅问题 19.1


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管