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

Input 从stdIn读取单个字符或字节,无需等待SML中的换行符,input,functional-programming,byte,buffer,sml,Input,Functional Programming,Byte,Buffer,Sml,我在使用TextIO结构时遇到了一个问题, 因为每个输入都等待换行符和缓冲区已满。。。 我如何与BinIO和stdIn合作解决该问题 任何有用的输入都将不胜感激 顺便说一句:我使用的是MLTton,所以除了通常的标准libs之外没有什么了。作为最后手段,您可以自己用C编写它,然后使用外部函数接口从SML调用它。您可以在此处找到有关MLton FFI的更多信息: 我在使用TextIO结构时遇到了一个问题,因为每个输入都等待换行符和缓冲区已满。。。我如何与BinIO和stdIn合作解决该问题 Bin

我在使用TextIO结构时遇到了一个问题, 因为每个输入都等待换行符和缓冲区已满。。。 我如何与BinIO和stdIn合作解决该问题

任何有用的输入都将不胜感激


顺便说一句:我使用的是MLTton,所以除了通常的标准libs之外没有什么了。

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

我在使用TextIO结构时遇到了一个问题,因为每个输入都等待换行符和缓冲区已满。。。我如何与BinIO和stdIn合作解决该问题

BinIO和TextIO一样,实现缓冲I/O。它们都实现命令式IO签名。对于无缓冲I/O,您需要降低抽象级别,并使用PRIMITIVE_IO或POSIX_IO的实现

具体来说,.readVec允许您无缓冲地从文件描述符读取。对于标准输入,文件描述符为.stdin

但是,如果您的标准输入是从控制台进行的,而不是从文件重定向、从管道或诸如此类的地方进行的,那么控制台很有可能只在用户点击Enter键后向MLton提供输入。使用Posix.IO将绕过MLton提供的行缓冲功能,但是如果您还需要绕过控制台的行缓冲,那么您可能需要使用特定于您的操作系统的特殊C库,以及Matt在回答中提到的外部函数接口