1、proc文件系统介绍
1.1、操作系统级别的调试 (1)简单程序单步调试 (2)复杂程序printf打印信息调试 (3)框架体系日志记录信息调试 (4)内核调试的困境 1.2、proc虚拟文件系统的工作原理 (1)Linux内核是一个非常庞大、非常复杂的一个单独的程序,对于这样的一个程序来说调试是非常复杂的 (2)像kernel这样庞大的项目,给里面添加/更改一个功能是非常麻烦的,因为你添加的一个功能可能会影响其他已经有的 (3)为了降低内核调试和学习的难度,内核开发者们在内核中添加了一些属性专门用于调试内核,proc文件系统就是一个尝试 (4)proc文件系统的思路就是:在内核中构建一个虚拟文件系统/proc,内核运行时将内核中一些关键的数据结构以文件的方式呈现在/proc目录中的一些特定的文件中,这样相当于将不可见的内核中的数据结构以可视化的方式呈现给内核的开发者 (5)proc目录下的文件大小都是0,一万这些文件本身并不存在于硬盘中,也不是一个真实文件,只是一个借口,当我们去读取这个文件时,其实内核并不是去硬盘上找文件,而是映射为内核内部一个数据结构被读取并且格式化成字符串返回给我们 1.3、proc文件系统的使用 (1)cat以手工查看 (2)程序中可以文件IO访问 (3)在shell程序中用cat命令结合正则表达式来获取并处理内核信息 1.4、proc实战
#include<stdio.h>
int main(int argc, char **argv)
{
int fd;
char buf[512] = {0};
if(argc != 2)
{
printf("suage: %s version|devices\n", argv[0]);
return -1;
}
if(strcmp(argv[1], "version"))
{
fd = open("/proc/version", O_RDONLY);
if(fd < 0)
{
perror("open /proc/version");
return -1;
}
read(fd, buf, sizeof(buf));
printf("结果是:%s.\n", buf);
}
else if(strcmp(argv[1], "device"));
{
fd = open("/proc/devices", O_RDONLY);
if(fd < 0)
{
perror("open /proc/devices");
return -1;
}
read(fd, buf, sizeof(buf));
printf("结果是:%s.\n", buf);
}
return 0;
}
|