2015-02-24 49 views
1

是否有一種讀取CL中設備文件的特定方法?我嘗試在SBCL下面的代碼,但它似乎並沒有工作:從設備文件中讀取

(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顯示它。

+3

你能讀取字符而不是行嗎? – 2015-02-24 20:00:42

+0

閱讀角色的作品。現在有意義,只有在遇到#\換行符或文件結束時,read-line纔會返回。 – automaton 2015-02-25 21:00:26

+0

還要注意,NEWLINE可以表示CR,CRLF(兩個字符!)或LF - 取決於Lisp,Lisp配置和平臺。 – 2015-02-25 21:03:31

回答

2

我想你需要從二進制文件中讀取它們。舉例來說,這裏就是我從/dev/urandom閱讀:

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

我覺得你的問題是與緩衝。 我不認爲你可以在CL open中關閉它,所以恐怕你必須使用sb-unix:unix-opensb-unix:unix-read