关于common lisp:从设备文件中读取

Reading from device files

是否有特定的方法可以在 CL 中读取设备文件?我在 SBCL 中尝试了以下代码,但它似乎不起作用:

1
2
3
4
5
6
(defparameter modem #p"/dev/ttyUSB2")
(defun read-modem()
  (with-open-file (fd modem :direction :io :if-exists :append)
          (loop while (peek-char nil fd) do
            (format t"~A" (read-line fd))
            (finish-output fd))))

我知道有输出,因为 cat /dev/ttyUSB2 显示了它。


我认为您的问题在于缓冲。
我不认为你可以在 CL open 中将其关闭,所以恐怕你必须使用 sb-unix:unix-opensb-unix:unix-read


我猜,你需要像从二进制文件一样读取它们。例如,这是我从 /dev/urandom:

中读到的内容

1
2
3
4
> (with-open-file (fd"/dev/urandom" :direction :io :if-exists :append
                      :element-type 'unsigned-byte)
    (read-byte fd))
161