如何在C中实现(char-ready?)

Mar*_*ain 8 c io scheme

我目前正在C中实现Scheme R5RS,并且我很难尝试实现(char-ready?)函数.

我有下面引用的功能的规格.该功能保证不会阻止.当没有输入就绪时,fgetc()之类的标准C函数在调用时都会阻塞输入.

有没有人知道是否有办法以一种简单的方式实现这一点,而不会产生专用的IO线程?

编辑:我的输入流类型是FILE*,可以是stdin或用fopen()打开的文件.

(char-ready?)程序

(char-ready?port)程序

如果字符在输入端口上就绪,则返回#t,否则返回#f.如果char-ready返回#t,则保证给定端口上的下一个read-char操作不会挂起.如果端口位于文件末尾,那么char-ready?返回#t.端口可以​​省略,在这种情况下,它默认为current-input-port返回的值.

理由:

炭火准备好了吗?存在使程序可以从交互式端口接受字符而不会卡住等待输入.与此类端口关联的任何输入编辑器必须确保其字符的存在已由char-ready声明?不能擦掉.准备好了吗?要在文件末尾返回#f,文件末尾的端口与没有就绪字符的交互式端口无法区分.

zvr*_*rba 5

你需要低于stdio级别.在UNIX上,您可以使用fileno()获取与流关联的文件描述符,然后您可以使用select()read()系统调用来执行非阻塞读取.