2012-01-19 58 views
3

(Clojure的新手)咕嘟咕嘟的/ proc /使用Clojure cpuinfo中

在我的Linux機器,啜/proc/cpuinfo引發錯誤:

user=> (slurp "/proc/cpuinfo") 
java.io.IOException: Invalid argument (NO_SOURCE_FILE:0) 

任何人都知道這是爲什麼? (是/ proc文件系統在Java中某種二等公民?)

編輯:下面的代碼,改編自nakkaya.com,完美的作品:

(with-open [rdr (java.io.BufferedReader. 
      (java.io.FileReader. "/proc/cpuinfo"))] 
    (let [seq (line-seq rdr)] 
    (apply print seq))) 

我不知道爲什麼這種差異?

+1

就java而言,/ proc應該是一個像任何其他目錄一樣的目錄,包含文件和子目錄。 –

回答

5

我在/ proc中遇到過類似的問題。解決方案很簡單:

(slurp (java.io.FileReader. "/proc/cpuinfo")) 
3

的問題是Java不能在/ proc中打開一個DataInputStream所以啜食功能的心不是要幫助你在這裏,對不起:(

的/ proc/cpuinfo中有一點奇怪,因爲它具有零文件大小併產生字節讀取時,這攪得更聰明的java文件處理類。

ls -l /proc/cpuinfo 
-r--r--r-- 1 root root 0 2012-01-20 00:10 /proc/cpuinfo 

看到這個線程更http://www.velocityreviews.com/forums/t131093-java-cannot-access-proc-filesystem-on-linux.html

你將不得不使用的FileReader打開它。我加入了一個例子在

+0

你能看看我的編輯? – Rom1

+0

另外,爲什麼'slurp'只需要輸出一個字符串並且不以任何方式解析它時使用'DataInputStream'? – Rom1

+0

@ Rom1,我不完全確定你的問題在這裏,但slurp確實檢查編碼。查看源代碼很容易,你會發現它最終會在引擎下調用InputStreamReader,這對我來說似乎是合理的。見https://github.com/richhickey/clojure/blob/a1eff35124b923ef8539a35e7a292813ba54a0e0/src/clj/clojure/core.clj#L5353 –