2015-05-18 3 views
1

У меня возникла проблема при работе с структурой TextIO, , потому что каждый вход waait для символа новой строки и для заполнения буфера ... Я работаю с BinIO и stdIn для решения этой проблемы?Прочитайте одиночный символ или байт из stdIn, не дожидаясь появления новой строки в SML

Любой полезный ввод оценивается.

BTW: Я использую MLTton, поэтому нет ничего более обычного обычного libs.

ответ

0

В крайнем случае вы можете написать его самостоятельно на C, а затем вызвать его из SML с помощью интерфейса внешних функций. Вы можете узнать более подробную информацию о FFI MLton здесь: http://mlton.org/ForeignFunctionInterface

0

Я столкнулся с проблемой при работе со структурой TextIO, потому что каждый вход Уэйтс для новой строки chacter и для буфера, чтобы быть полным ... Как могу я работать с BinIO и stdIn для решения этой проблемы?

BinIO, как TextIO, реализует буферном ввода/вывода. (Они оба реализуют подпись IMPERATIVE_IO.) Для небуферизованный I/O, вам нужно перейти «вниз» на уровень абстракции и использовать реализацию PRIMITIVE_IO или POSIX_IO.

В частности, Posix.IO .readVec позволяет вам читать небуферически из дескриптора файла. (В случае стандартного ввода файловый дескриптор равен Posix.FileSys .stdin.)

Однако, если ваш стандартный ввод с консоли (в отличие от перенаправления из файла или взятия из трубы или чего-то еще), тогда есть очень хороший шанс, что консоль только вводит вход в MLton после того, как пользователь нажимает Enter. Использование Posix.IO будет обходить функциональность буферизации линии, которую предоставляет MLton, но если вам также необходимо обойти буферизацию линии консоли, вам, скорее всего, придется использовать специальные библиотеки C (специфичные для вашей операционной системы), с интерфейсом внешних функций, который Мэтт упоминает в своем ответе.

Смежные вопросы