【发布时间】:2015-07-30 02:22:07
【问题描述】:
我在使用 TextIO 结构时遇到了一个问题, 因为每个输入都等待换行符和缓冲区已满...... 我如何使用 BinIO 和 stdIn 来解决这个问题?
感谢任何有用的意见。
顺便说一句:我使用的是 MLTton,所以没有什么比通常的标准库更多的了。
【问题讨论】:
标签: input functional-programming byte buffer sml
我在使用 TextIO 结构时遇到了一个问题, 因为每个输入都等待换行符和缓冲区已满...... 我如何使用 BinIO 和 stdIn 来解决这个问题?
感谢任何有用的意见。
顺便说一句:我使用的是 MLTton,所以没有什么比通常的标准库更多的了。
【问题讨论】:
标签: input functional-programming byte buffer sml
作为最后的手段,您可以自己用 C 语言编写它,然后使用外部函数接口从 SML 调用它。您可以在此处找到有关 MLton 的 FFI 的更多信息:http://mlton.org/ForeignFunctionInterface
【讨论】:
我在使用 TextIO 结构时遇到了一个问题,因为每个输入都在等待换行符和缓冲区已满...如何使用 BinIO 和 stdIn 来解决这个问题?
BinIO 和TextIO 一样,实现了缓冲 I/O。 (它们都实现了IMPERATIVE_IO 签名。)对于无缓冲 I/O,您需要“降低”抽象级别,并使用PRIMITIVE_IO 或POSIX_IO 的实现。
具体来说,@987654321@.readVec 允许您从文件描述符中无缓冲地读取。 (在标准输入的情况下,文件描述符为@987654322@.stdin。)
但是,如果您的标准输入来自控制台(而不是从文件重定向,或从管道中获取,等等),那么控制台很有可能只提供输入 to 用户按 Enter 后的 MLton。使用 Posix.IO 将绕过 MLton 提供的行缓冲功能,但如果您还需要绕过控制台的行缓冲,那么您可能需要使用特殊的 C 库(特定于您的操作系统)和外部函数Matt 在他的回答中提到的界面。
【讨论】: