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也能够轻松地完成此项工作。
输出示例