我在使用TextIO结构时遇到问题, 因为每个输入都等待换行符并且缓冲区已满... 我如何使用BinIO和stdIn来解决这个问题?
感谢任何有用的输入。
BTW:我使用的是MLTton,所以只有通常的标准库。
答案 0 :(得分:0)
作为最后的手段,您可以在C中自己编写,然后使用外部函数接口从SML调用它。您可以在此处找到有关MLton FFI的更多信息:http://mlton.org/ForeignFunctionInterface
答案 1 :(得分:0)
我在使用TextIO结构时遇到了问题,因为每个输入都等待换行符并且缓冲区已满...我如何使用BinIO和stdIn来解决这个问题?
BinIO
与TextIO
一样,实现缓冲 I / O. (它们都实现了IMPERATIVE_IO
签名。)对于 unbuffered I / O,您需要“降低”抽象级别,并使用PRIMITIVE_IO
或{的实现{1}}。
具体来说,POSIX_IO
允许您从文件描述符中无缓冲地读取。 (在标准输入的情况下,文件描述符为Posix.IO.readVec
。)
但是,如果您的标准输入来自控制台(而不是从文件重定向,或从管道中取出,或者诸如此类),那么控制台很有可能只提供输入< / em>用户点击Enter后的MLton。使用Posix.FileSys.stdin
将绕过MLton提供的行缓冲功能,但如果您还需要绕过控制台的行缓冲,那么您可能需要使用特殊的C库(特定于您的操作系统), Matt在他的回答中提到的外来函数接口。