我目前正在使用C语言实现Scheme R5RS,并且在尝试实现(char-ready?)函数时遇到了困难。
以下是该函数的规格说明。该函数保证不会阻塞。当没有准备好输入时,标准C函数(如fgetc())都会在调用时阻塞。
有人知道是否有一种好的简单方法来实现它,而不需要生成专用的IO线程吗?
编辑: 我的输入流类型是FILE*,可以是stdin或使用fopen()打开的文件。
(char-ready?)过程
(char-ready? port)过程
如果输入端口已经准备好一个字符则返回#t,否则返回#f。如果char-ready返回#t,则保证在给定端口上进行的下一个read-char操作不会挂起。如果端口在文件结束处,则char-ready?返回#t。可以省略port参数,此时它默认为current-input-port返回的值。
理由:
char-ready?存在的目的是使程序能够从交互端口接受字符而无需等待输入。与此类端口相关联的任何输入编辑器都必须确保通过char-ready?断言存在的字符不能被擦除。如果char-ready?在文件结束处返回#f,则文件结束的端口将与没有准备好字符的交互端口不可区分。
FILE*
在长期内可能会变得不太有用,你将会转而自己完成更多的事情。(假设你希望它不仅仅是一个玩具。) - Eli Barzilay