proc目录的文件大小都是0,因为这些文件本身并不存在与硬盘中,也不是一个真实的文件,他只是一接口,当我们去读取这个文件的时候,其实内核并不是去硬盘里面找这个文件,而是映射为内核中的一个数据结构被读取并且格式化成字符串返回给我的,所以尽管我们看到的文件内容字符串,和普通文件一样,但是实际上我们知道这个内容是实时从内核中数据结构来的而不是硬盘中来的。
主要下面介绍什么使用:
一般是用cat命令来查看。 例如cat /proc/devices查看安装的驱动。
在shell中用cat命令结合正则表达式进行处理
还可用文件IO来读取。测试代码如下:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int fd = -1;
char buff[512] = {0};
if(argc !=2)
{
printf("usge: %s version|devices",argv[0]);
return -1;
}
if(!strcmp(argv[1],"-v"))
{
fd = open("/proc/version",O_RDONLY);
}
else if(!strcmp(argv[1],"-d"))
{
fd = open("/proc/devices",O_RDONLY);
}
if(fd<0)
{
perror("open:");
return 0;
}
read(fd,buff,sizeof(buff));
printf("result :%s",buff);
return 0;
}
再简单的介绍下sys文件系统,和proc文件系统一样,都是虚拟文件系统,都在/目录下有一个目录/sys目录。都是不是硬盘中的文件都是内核中的数据结构的可视化的接口。和proc不一样的就是,/proc中的文件只能读,/sys中的文件可读可写的,读/sys中的文件就是获取数据结构的值,而写入/sys就是设置内核中的数据结构的元素的值。为啥需要两个呢?是历史原因,先有proc文件系统来调内核,实际效果也不错。