从stdIn中读取单个字符或字节,而不用等待SML中的换行符



我在使用TextIO结构时遇到了一个问题,因为每次输入都要等待换行符和缓冲区满了……我如何与BinIO和stdIn一起工作来解决这个问题?

任何有帮助的输入都是感激的。

顺便说一句:我使用的是MLTton,所以没有什么比通常的标准库。

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

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

TextIO一样,

BinIO也实现了缓冲的 I/O。(两者都实现了IMPERATIVE_IO签名。)对于无缓冲的 I/O,您需要在抽象上"下降"一个级别,并使用PRIMITIVE_IOPOSIX_IO的实现。

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

但是,如果您的标准输入来自控制台(与从文件重定向或从管道获取相反),那么很有可能控制台只在用户按Enter后向 MLton提供输入。使用Posix.IO将绕过MLton提供的行缓冲功能,但是如果您还需要绕过控制台的行缓冲,那么您可能需要使用特殊的C库(特定于您的操作系统),以及Matt在他的回答中提到的外部函数接口。

最新更新