Я открываю последовательный порт с CLISP в Cygwin как поток ввода-вывода и обнаружил, что посимвольное чтение слишком медленное. По какой-то причине поток классифицируется как интерактивный, что, по-моему, приводит к зависанию со значением чтения, меньшим, чем размер моей последовательности.
Я взаимодействую с портом отладки в специальной системе. Я собирался потратить немного времени на написание сценариев некоторых взаимодействий, но в итоге побрил яка.
Я вижу несколько разных способов решить эту проблему.
Читайте 1 символ за раз, что позволяет читать "char-no-hang". Это слишком медленно.
Запись FFI в последовательную библиотеку. Я не думаю, что мне нужно это делать.
Найдите способ определить оставшуюся длину потока. Хорошее решение.
Выясните, как сделать последовательный порт неинтерактивным, что может привести к возврату последовательности чтения после завершения потока. Мне кажется, это лучшее решение.
(with-open-file (serial "/dev/ttyS3"
:direction :io
:external-format :unix
:if-exists :overwrite)
(read-sequence *data* serial)))
Итак, согласно заголовку, почему последовательность чтения не возвращается в конце потока консоли? Кроме того, каков наилучший способ добиться такого поведения? Я бы предпочел придерживаться базового CLISP.