从stdIn读取单个字符或字节,无需等待SML中的换行符

时间:2015-05-18 14:15:10

标签: input functional-programming byte buffer sml

我在使用TextIO结构时遇到问题, 因为每个输入都等待换行符并且缓冲区已满... 我如何使用BinIO和stdIn来解决这个问题?

感谢任何有用的输入。

BTW:我使用的是MLTton,所以只有通常的标准库。

2 个答案:

答案 0 :(得分:0)

作为最后的手段,您可以在C中自己编写,然后使用外部函数接口从SML调用它。您可以在此处找到有关MLton FFI的更多信息:http://mlton.org/ForeignFunctionInterface

答案 1 :(得分:0)

  

我在使用TextIO结构时遇到了问题,因为每个输入都等待换行符并且缓冲区已满...我如何使用BinIO和stdIn来解决这个问题?

BinIOTextIO一样,实现缓冲 I / O. (它们都实现了IMPERATIVE_IO签名。)对于 unbuffered I / O,您需要“降低”抽象级别,并使用PRIMITIVE_IO或{的实现{1}}。

具体来说,POSIX_IO允许您从文件描述符中无缓冲地读取。 (在标准输入的情况下,文件描述符为Posix.IO.readVec。)

但是,如果您的标准输入来自控制台(而不是从文件重定向,或从管道中取出,或者诸如此类),那么控制台很有可能只提供输入< / em>用户点击Enter后的MLton。使用Posix.FileSys.stdin将绕过MLton提供的行缓冲功能,但如果您还需要绕过控制台的行缓冲,那么您可能需要使用特殊的C库(特定于您的操作系统), Matt在他的回答中提到的外来函数接口。