xmlprocfs SourceForge Logo

最近更新日期:2001年3月5日
(英文版)
(簡體版)
目錄
1.簡介
2.新聞
3.服務/下載
4.已完成的工作
5.錯誤
6.頭痛的問題
7.我為什麼決定創建新的文件系統
8.輸出示例


歡迎任何關于xmlprocfs的建議,請把它們發送到 王立
簡介

歡迎對xmlprocfs感興趣的人們!

xmlprocfs是Linux內核的一個補丁,它創建了一個于傳統procfs相對應的新文件系統。它以 通用公共許可証(GPL)發行。大家都知道Linux內核通過procfs向用戶模式下的應用程序報告了 大量重要的信息,而且應用程序也可以對procfs中的一部分文件進行寫操作以便從某些角度控制 內核

procfs的輸出便于人類閱讀,但並不遵從任何公共的規則。因此,為了訪問procfs中的文件, 程序員就必須為每個不同的文件單獨編制解析器。這項任務實在太累人了,所以我想如果procfs 能夠以XML格式輸出數據,我就能夠用通用的XML解析器從procfs中獲取數據了。但現有的許多應用 程序需要procfs的傳統格式的輸出數據,如果我直接改變procfs的輸出格式,它們就不能正常 運行了。

所以我創建了新文件系統xmlprocfs,procfs中所有的文件都會在xmlprocfs中相同的位置出現, 除了以不同格式輸出之外,二者完全相同。我可以從xmlprocfs中得到XML數據,而需要改變的只有 根路徑。從用戶的角度看,procfs和xmlprocfs是相互獨立的,他/她可以mount或者umount任何一個 而不影響另一個文件系統。

新聞
  • xmlprocfs-0.3與2001年3月5日發布。該版本應應用于Linux-2.4.2版內核,對大部分輸出函數進行了規范化。此外,還修正了一些0.2版中的錯誤。在開發0.3版的過程中,注意到輸出函數的復雜性。不同的輸出函數以不同的方式生成它們的輸出:有的直接使用sprintf、有的在文件打開的時候一次性生成所有內容、有的則改變了文件指針的含義,以便達到盡快找到需要輸出的記錄的目的。而且許多內核子系統還提供了專用的proc文件創建、訪問機制。針對這些不同,僅僅提供一種規范化的輸出方式是不夠的,有些輸出函數甚至無法進行規范化。而且,把所有輸出函數都歸于現有的規范輸出方式,毫無疑問會較大地降低輸出效率。開發新的規范輸出方式,是下一個版本的主要任務。
  • 近期工作繁忙,還有一些事攪得我心神不寧,不過xmlprocfs的開發並沒有停頓。在我修改系統中的輸出函數時,我發現輸出函數幾乎遍布了整個內核源代碼,工作量之大超出了我最初的想象。因此,我覺得還是要把整個工作劃分成小一點的階段。第一步,我決定完成大部分輸出函數的規范化工作,也就是說用proc_printf來完成大部分的輸出工作。這將為下一階段提供XML數據打下良好的基礎。然而,即使這樣的一件工作也需要消耗相當多的時間。為此,我給出了源文件修改進程的列表。由于該列表幾乎每天都要發生變動,我決定只提供英文版。詳細情況請看4、已完成的工作
  • xmlprocfs-0.2于2001年2月5日發布。它改正了0.1中的一個錯誤,xmlprocfs中又有一些新 文件可以生成XML數據了(詳情請參見已完成的工作)。還提供了一個函數 以進行XML替換(就是把‘&’替換為‘&amp;’、把‘<’替換為‘&lt;’、把‘>’ 替換為‘&gt;’)。
服務/下載
已完成的工作

現在看來,僅僅為輸出函數提供一種規范輸出方式是不夠的。有許多輸出函數以相當不同的方式生成輸出內容,如果以現有的方式進行規范化,要麼不能做到,要麼降低輸出效率。開發新的規范輸出方式是下一個版本的首要任務。目前,適合于用普通規范化方式進行規范化的輸出函數,基本上都已經完成規范化工作。但它們還不能生成XML數據。技術問題在'linux/Documentation/filesystem/xmlprocfs.txt'中進行敘述。

源代碼修改工作進度列表詳細地給出了Linux源代碼中各個目錄的修改情況。

下面的表格列舉了所有已經能夠生成XML數據的文件,並假定xmlprocfs的安裝點為/xmlproc。在 括號中給出的版本號給出了第一個使該文件能夠生成XML數據的版本。

/xmlproc中的文件
cmdline (0.1)cpuinfo (0.1)devices (0.1)dma (0.1)
execdomains (0.1)filesystems (0.1)interrupts (0.1)iomem (0.1)
ksyms (0.1)loadavg (0.1)locks (0.1)meminfo (0.1)
modules (0.1)partitions (0.1)stat (0.1)swap (0.1)
uptime (0.1)version (0.1)
/xmlproc/pid中的文件
cmdline (0.2)environ (0.2)stat (0.2)statm (0.2)
status (0.2)
/xmlproc/tty中的文件
drivers (0.2)ldiscs (0.2)

在運行‘make config’、‘make menuconfig’或‘make xconfig’時,把‘xmlprocfs’設置為yes。 在成功地編譯和設置帶有xmlprocfs支持的內核之後,可以用'mount -t xmlproc nodev /xmlproc'來 mount文件系統並進行測試。

錯誤
  • 在xmlprocfs-0.1中,讀取下列文件將導致系統崩潰:
    • /xmlprocfs/net/raw
    • /xmlprocfs/net/netstat
    • /xmlprocfs/net/snmp
    • /xmlprocfs/net/sockstat
    • /xmlprocfs/net/tcp
    • /xmlprocfs/net/udp
    該錯誤已經在xmlprocfs-0.2中被修正。
頭痛的問題
  • /xmlproc/pid/cmdline
    /xmlproc/pid/cmdline的讀出函數在argument不是以0結束的情況下,還要輸出環境變量。代碼中的 注釋告訴我這是由‘setproctitle(3)’導致的。我不知道這是為什麼也找不到這個man手冊,所以我現在不輸出環境變量。
    如果可能的話,請幫助我。謝謝!

我為什麼決定創建新的文件系統

還有另一種辦法可以讓應用程序得到XML數據:編制一個讀取procfs的庫,它象XML解析器一樣 在內存中創建數據結構。但是

  • 庫是用某種特定的編程語言編制的,比如說C。如果不提供外包(wrapper),就不能在其他 語言中使用。
  • 庫只能生成一種數據結構,但不同的XML庫使用不同的XML數據結構(例如,libxml和xml4c就 會生成完全不同的數據結構)。所以庫生成的數據結構只能被一種特定的XML庫所訪問和操作。
  • Linux內核總是不停地處于改進之中,由于庫本身于內核並不相關,跟上內核的更新是相當困難的。

對于新文件系統xmlprocfs,應用程序程序員可以:

  • 使用任何編程語言
  • 使用任何XML解析器
  • 內核開發者可以輕鬆地生成兩種格式的數據,xmlprocfs也能夠輕鬆地完成此項工作。
輸出示例