1. 简介
proc 文件系统是一个虚拟文件系统,它以文件系统的方式为应用层访问系统内核数据提供了接口 , 用户和应用程序可以通过 proc 文件系统得到系统信息和进程相关信息 ,对 proc 文件系统的读写作为与内核进行通信的一种手段。但是与普通文件不同的是,proc 文件系统是动态创建的,文件本身并不存在于磁盘当中、 只存在于内存当中,与 devfs 一样,都被称为虚拟文件系统。 最初构建 proc 文件系统是为了提供有关系统中进程相关的信息,但是由于这个文件系统非常有用,因此内核中的很多信息也开始使用它来报告,或启用动态运行时配置。内核构建 proc 虚拟文件系统,它会将内核运行时的一些关键数据信息以文件的方式呈现在 proc 文件系统下的一些特定文件中,这样相当于将一些不可见的内核中的数据结构以可视化的方式呈现给应用层。 proc 文件系统挂载在系统的/proc 目录下,对于内核开发者(譬如驱动开发工程师)来说,proc 文件系统给了开发者一种调试内核的方法:通过查看/proc/xxx 文件来获取到内核特定数据结构的值,在添加了新功能前后进行对比,就可以判断此功能所产生的影响是否合理。 /proc 目录下中包含了一些目录和虚拟文件,如下所示: 可以看到/proc 目录下有很多以数字命名的文件夹, 这些数字对应的其实就是一个一个的进程 PID 号,每一个进程在内核中都会存在一个编号,通过此编号来区分不同的进程,这个编号就是 PID 号。 /proc 目录下除了文件夹之外,还有很多的虚拟文件,譬如 buddyinfo 、 cgroups 、 cmdline 、 version 等等,不同的文件记录了不同信息,关于这些文件记录的信息和意思如下: ⚫ cmdline:内核启动参数; ⚫ cpuinfo: CPU 相关信息; ⚫ iomem: IO 设备的内存使用情况; ⚫ interrupts:显示被占用的中断号和占用者相关的信息; ⚫ ioports: IO 端口的使用情况; ⚫ kcore:系统物理内存映像,不可读取; ⚫ loadavg:系统平均负载; ⚫ meminfo:物理内存和交换分区使用情况; ⚫ modules:加载的模块列表; ⚫ mounts:挂载的文件系统列表; ⚫ partitions:系统识别的分区表; ⚫ swaps:交换分区的利用情况; ⚫ version:内核版本信息; ⚫ uptime:系统运行时间;2. 使用proc文件
proc 文件系统的使用就是去读取 /proc 目录下的这些文件,获取文件中记录的信息,可以直接使用 cat 命令读取,也可以在应用程序中调用 open() 打开、然后再使用 read() 函数读取。 在 Linux 系统下直接使用 cat 命令查看 /proc 目录下的虚拟文件,譬如 "cat /proc/version" 查看内核版本相关信息: 使用 read() 函数读取 编写一个简单地程序,使用 read() 函数读取 /proc/version 文件。#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char buf[512] = {0};
int fd;
int ret;
/* 打开文件 */
fd = open("/proc/version", O_RDONLY);
if (-1 == fd) {
perror("open error");
exit(-1);
}
/* 读取文件 */
ret = read(fd, buf, sizeof(buf));
if (-1 == ret) {
perror("read error");
exit(-1);
}
/* 打印信息 */
puts(buf);
/* 关闭文件 */
close(fd);
exit(0);
}
读取出来得数据和cat查看的一致。如下:
不断学习中,共勉!!! 标签:文件,读取,文件系统,嵌入式,内核,Linux,include,proc From: https://blog.csdn.net/YYYYYYJJJJJYYYYY/article/details/144634810