首页 > 系统相关 >嵌入式Linux,proc文件系统讲解,介绍以及读取使用

嵌入式Linux,proc文件系统讲解,介绍以及读取使用

时间:2024-12-22 09:28:17浏览次数:5  
标签:文件 读取 文件系统 嵌入式 内核 Linux include proc

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

相关文章

  • RockyLinux9编译安装MySQL8
    原文链接:RockyLinux9编译安装MySQL8-LiuZijian’sBlog|刘子健的博客Linux版本:RockyLinuxrelease9.5(BlueOnyx)1.下载打开MySQL-Community-Server官方下载页面:https://downloads.mysql.com/archives/community/筛选出要下载的版本,ProductVersion选择8.0......
  • linux用iftop实时查看软件应用进程网络占用情况
    步骤1:查看网卡名称1.使用ifconfig命令查看网卡信息:ifconfig你会看到类似以下的输出:eth0Linkencap:EthernetHWaddr00:11:22:33:44:55inetaddr:192.168.31.1Bcast:192.168.31.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICA......
  • 嵌入式系统 第三讲 嵌入式Linux操作系统
    自己整理的笔记自用,抄录老师给的课件,只是看没有印象,所以我就敲出来了,不算原创也不算翻译,考试复习用的,有需要的伙伴可以看看,个人觉得还是有逻辑的。嵌入式系统对操作系统(OS)的要求:(1)高度简练(2)质量可靠(3)界面友善(4)易开发(5)多任务(6)价格低•3.1嵌入式Linux简介3.1.1μCLinux-......
  • 嵌入式系统 第二讲 ARM处理器和指令集
    自己整理的笔记自用,抄录老师给的课件,只是看没有印象,所以我就敲出来了,不算原创也不算翻译,考试复习用的,有需要的伙伴可以看看,个人觉得还是有逻辑的。•2.1ARM处理器简介2.1.1ARM公司和ARM产品简介ARM公司本身不生产芯片,而是通过转让设计方案(IP核)由合作伙伴(Samsung、Int......
  • 嵌入式系统第一讲 嵌入式系统概述
    自己整理的笔记自用,抄录老师给的课件,只是看没有印象,所以我就敲出来了,不算原创也不算翻译,考试复习用的,有需要的伙伴可以看看,个人觉得还是有逻辑的。•1.1嵌入式系统简介1.1.1嵌入式系统历史与现状嵌入式系统的前身是单片机(20世纪70年代)嵌入式系统发展的四个阶段:无操作......
  • Linux —— 搭建Apache服务器
    一、基本概念定义Apache服务器(全称ApacheHTTPServer)是一款开源的、跨平台的Web服务器软件。它通过HTTP协议提供网页服务,能够将存储在服务器上的网页文件(如HTML文件、图片、脚本等)发送给客户端(如浏览器)。工作原理当客户端(例如浏览器)向服务器请求一个网页时,Apache......
  • 在Linux系统上安装KVM(Kernel-based Virtual Machine)
    在Linux系统上安装KVM(Kernel-basedVirtualMachine)通常与安装libvirt一起进行,因为libvirt提供了对KVM的抽象和管理。以下是在基于Debian(如Ubuntu)和基于RPM(如CentOS/RHEL)的系统上安装KVM的步骤:基于Debian的系统(如Ubuntu) 1.更新包列表:【bash】sudoaptupdate 2.安......
  • Linux 中检查 Apache Web Server (httpd) 正常运行时间的 4 种方法
    注:机翻,未校。4WaysToCheckUptimeofApacheWebServer(httpd)onLinuxNovember28,2019byMageshMaruthamuthuWeallknowaboutthepurposeofuptimecommandinLinux.我们都知道Linux中uptime命令的目的。ItisusedtochecktheuptimeoftheL......
  • Spring源码分析之后置处理器 BeanPostProcessor
    前言在我前面文章带领大家看源码的时候我们就是会发现义初始化为例子:我们在初始化的时候就是要要在初始化前运行BeanPostProcessorsBeforeInitialization方法然后在初始化后就是会调用BeanPostProcessorsAfterInitialization方法,这个意思就是说我们可以在Bean对象进行初始......
  • Linux学习笔记(二) vi/vim快速入门
    Linux系统会内置vi文本编辑器。vim具有程序编辑的能力,可以看作是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。下面将介绍:1.vim打开或创建文件的方法。2.vim的三种工作模式。3.v......