proc文件系统5大功能

类别:软件工程 点击:0 评论:0 推荐:

proc文件系统5大功能

转自: ZDNet China

 在Linux里,你可以使用proc虚拟文件系统来访问各种文件信息,包括当前正在运行的进程和电池状态。Proc文件系统是虚拟的,因为它由内存创建,并于系统更改的时候动态地更新。要获取系统信息的访问权,你应该使用标准文件API,例如fopen,fread,在proc文件系统里读取适当的文件。

开始认真考虑 on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5")))

Proc文件系统的一大特点是测试不需要任何的代码。举个例子来说,要获得系统的CPU信息,你只需要这样做:

cat /proc/cpuinfo

得到的输出是这样的:

processor     : 0
vendor_id      : GenuineIntel
cpu family      : 6
model             : 5
model name  : Pentium II (Deschutes)
stepping        : 2
cpu MHz       : 300.010
cache size    : 512 KB
fdiv_bug      : no
hlt_bug       : no
f00f_bug      : no
coma_bug      : no
fpu           : yes
fpu_exception : yes
cpuid level   : 2
wp            : yes
flags         : fpuvme de psetscmsrpaemce cx8 sep mtrrpgemcacmov pat pse36 mmxfxsr
bogomips      : 598.01

输出结果是易读的,而且很容易在代码中分析。不幸地,不是每种proc文件的格式都一样,因为数据的指令不同,不过它们都是大同小异的。

如果你仔细观察输出,就会发现分析这些字段异常简单。不过,写一个普通proc文件并不是一件容易的事,因为某些字段隔离器可能是另一个proc文件数据的一部分。因此,你需要为每个你需要访问的proc文件专门写一段代码。

虽然输出中的标记行看起来是被空格分隔的,但是实际上它们是被nul字符分隔的。我使用cat命令来显示CPU的信息,cat自动处理内含的nul。不幸地,所有的C库字符串命令不能正确处理,你需要使用memchr这样的命令来处理这些字符串。

下面是你能利用proc文件系统实现的5点非常酷的功能:

1.       进程信息:对于系统中的任何一个进程来说,在proc的子目录里都有一个同名的进程ID。在这个目录下,你将可以找到以下的条目:cmdline, cwd, environ, exe, fd, maps, mem, root, stat, statm, 以及status。某些信息仅对超级用户账号可见,例如进程根目录。你同样需要超级用户的全县来获取当前的工作目录。到每一个单独的含有现有进程信息的进程有一些可用的专门链接。对于系统里的任何一个进程来说,都有一个单独的自链接指向进程信息。这个的用处之一就是从进程中获取命令行信息。要实现这一目的,使用cmdline文件更加可靠。

2.       高级电源管理(APM)信息:如果你需要了解电池状态,你也可以从/proc/apm中获得。它包含了一个确定系统在使用AC还是电池、电池的充电程度以及电池的剩余时间的标记。不过,剩余时间的标记看起来不那么准确。

3.       CPU信息:利用cpuinfo文件,你可以获得CPU当前的准确信息。

4.       负载信息:loadavg文件包含了负载信息。负载是系统被使用的程度。它由3个从0到1变化的数字来行量。其中一个是最高利用率,一个是平均利用率,一个是最低利用率。平均值是最有用的。

5.       系统内存信息:meminfo文件包含了系统内存的详细信息。它显示了物理内存的数量,可用交换空间的数量,空闲内存的数量等等。

你需要注意的一点是,所有cat命令显示的空格分割符都是nul分隔符。那么,举个例子,apm文件包含一条单独的空行,它一定是由nul字符组成的。

从proc文件系统中,你能得到许多系统或进程的信息。正因为如此,你必须为相应的信息配置恰当的权限例如,根和cwd目录应该仅有超级用户能够访问。

on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5")))

本文地址:http://com.8s8s.com/it/it31748.htm