【问题标题】:Read a single character or byte from stdIn without waiting for newline in SML从 stdIn 读取单个字符或字节,无需等待 SML 中的换行符
【发布时间】:2015-07-30 02:22:07
【问题描述】:

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

感谢任何有用的意见。

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

【问题讨论】:

    标签: input functional-programming byte buffer sml


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多