嵌入式Linux:proc文件系统

news2024/9/20 13:16:54

目录

1、使用 cat 命令读取 /proc 文件系统

2、在应用程序中使用 open() 和 read() 函数读取 /proc 文件系统


proc 文件系统是一个虚拟文件系统,它以文件系统的形式为应用层提供访问系统内核数据的接口。用户和应用程序可以通过 proc 文件系统获取系统信息和进程相关信息,对 proc 文件系统的读写相当于与内核进行通信。然而,与普通文件不同,proc 文件系统是动态创建的,文件本身并不存在于磁盘中,只存在于内存中。因此,它被称为虚拟文件系统,类似于 devfs。

proc 文件系统特点如下:

  • 动态创建:proc 文件系统中的文件是动态生成的,实时反映系统和进程的状态。
  • 内核信息访问:最初,proc 文件系统是为了提供有关系统中进程的信息,但由于其高效和便捷,很多内核信息也开始通过它进行报告或启用动态运行时配置。
  • 可视化数据:内核将运行时的一些关键数据以文件的形式呈现在 proc 文件系统的特定文件中,使得应用层可以以可视化方式访问这些数据结构。

proc 文件系统通常挂载在系统的 /proc 目录下。对于内核开发者(如驱动开发工程师)来说,proc 文件系统提供了一种调试内核的方法:通过查看 /proc/xxx 文件,可以获取内核特定数据结构的值,对比添加新功能前后的数据变化,从而判断该功能的影响是否合理。

/proc 目录下包含了一些重要的目录和虚拟文件如下所示:

/proc 目录下,可以看到许多以数字命名的文件夹,例如 100038229998560 等。这些数字对应的是各个进程的 PID(进程标识符)。每个进程在内核中都有一个唯一的编号,即 PID,用来区分不同的进程。这些以数字命名的文件夹中记录了各个进程的相关信息。不同的信息通过不同的虚拟文件呈现。

以下是对 /proc 目录下各个文件和子目录的详细说明:

进程相关信息

  • /proc/[pid]:每个正在运行的进程都有一个对应的目录,[pid] 是进程的 ID,包含了关于该进程的各种信息。
    • /proc/[pid]/cmdline:启动该进程的命令行参数。
    • /proc/[pid]/cwd:指向进程当前的工作目录的符号链接。
    • /proc/[pid]/environ:进程的环境变量。
    • /proc/[pid]/exe:指向进程的可执行文件的符号链接。
    • /proc/[pid]/fd/:包含指向进程打开的文件描述符的符号链接。
    • /proc/[pid]/stat:进程的状态信息,包含进程的详细状态。
    • /proc/[pid]/status:进程的状态信息,以更易读的格式显示。

系统相关信息

  • /proc/cpuinfo:关于 CPU 的详细信息,包括每个 CPU 的型号、频率、缓存大小等。
  • /proc/meminfo:关于系统内存的详细信息,包括总内存、可用内存、缓存大小等。
  • /proc/uptime:系统启动后的时间和空闲时间。
  • /proc/version:内核版本信息,包括编译者和编译时间。
  • /proc/loadavg:系统负载平均值,显示最近 1、5、15 分钟的系统平均负载。
  • /proc/filesystems:内核支持的文件系统列表。
  • /proc/sys/:内核参数的配置,通过该目录可以调整和查看内核参数。

其他有用的虚拟文件

  • /proc/cmdline:内核启动参数。
  • /proc/iomem:IO 设备的内存使用情况。
  • /proc/interrupts:显示被占用的中断号和占用者相关的信息。
  • /proc/ioports:IO 端口的使用情况。
  • /proc/kcore:系统物理内存映像,不可读取,一般用于内核调试。
  • /proc/loadavg:系统平均负载。
  • /proc/meminfo:物理内存和交换分区使用情况。
  • /proc/modules:当前加载的内核模块列表。
  • /proc/mounts:当前挂载的文件系统列表。
  • /proc/partitions:系统识别的分区表。
  • /proc/swaps:交换分区的利用情况。
  • /proc/version:内核版本信息。
  • /proc/uptime:系统运行时间。

1、使用 cat 命令读取 /proc 文件系统

cat 命令是一个简单且常用的方式来读取 /proc 目录下的虚拟文件。

查看内核版本:

cat /proc/version

输出类似于:

Linux version 5.4.0-42-generic (buildd@lgw01-amd64-040) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020

查看系统负载:

cat /proc/loadavg

输出类似于:

0.00 0.01 0.05 1/103 1234

2、在应用程序中使用 open()read() 函数读取 /proc 文件系统

在编程中,可以使用标准的文件操作函数来读取 /proc 文件系统中的内容。以下是一个简单的 C 程序示例:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

#define BUFFER_SIZE 1024

void read_proc_file(const char *filepath) {
    int fd = open(filepath, O_RDONLY);
    if (fd == -1) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    char buffer[BUFFER_SIZE];
    ssize_t bytesRead;
    while ((bytesRead = read(fd, buffer, sizeof(buffer) - 1)) > 0) {
        buffer[bytesRead] = '\0';
        printf("%s", buffer);
    }

    if (bytesRead == -1) {
        perror("read");
        close(fd);
        exit(EXIT_FAILURE);
    }

    close(fd);
}

int main() {
    read_proc_file("/proc/version");
    return 0;
}

输出类似于:

Linux version 5.4.0-42-generic (buildd@lgw01-amd64-040) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020

通过 cat 命令和编程接口,用户和开发者可以方便地访问和读取 /proc 文件系统中的实时信息。这些信息对于系统监控、调试和优化非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯一面算法题:最长重复子串 1044,讲个比较好理解的思路

文章目录 1044. 最长重复子串前言思路Version 1&#xff1a;暴力Version 2&#xff1a;引入二分&#xff0c;优化 O ( n 2 ) O(n^2) O(n2)Version 3&#xff1a;引入自定义哈希&#xff0c;优化字符串比较Version 4&#xff1a;计算所有字符串的哈希值Version 5&#xff1a;引…

前后端项目交互异步请求JSON数据类型后端标准响应数据格式

java同步请求 当网页与后端交互时,前端不能再进行其他操作 服务器响应回来的内容,会把整个浏览器中的内容覆盖 这种请求方式在前后端交互时不太友好 现在的前后端交互请求都使用异步请求 异步请求(不同步) 通过在前端中使用js中提供的XMLHttpRequest对象实现发送异步请求…

人工智能与机器学习在医学领域的应用

作者主页: 知孤云出岫 人工智能与机器学习在医学中的应用 目录 作者主页:人工智能与机器学习在医学中的应用1. 引言2. 医学中的AI和ML技术概述2.1 人工智能和机器学习基础2.2 数据在医学AI中的重要性 3. 医学AI和ML的具体应用领域3.1 影像诊断3.2 基因组学与个性化医疗3.3 疾…

JavaEE篇:多线程(1)

一 认识线程(Thread) 1.1 概念 1.1.1 线程是什么&#xff1f; 线程被创建出来是为了完成分配给它的任务。线程又称轻量级进程&#xff0c;是操作系统的基本调度单位。一个线程就是一个执行流。线程的创建销毁和切换都比进程更加的方便。进程是操作系统分配资源的基本单位&am…

C++ //练习 17.16 如果前一题程序中的regex对象用“[^c]ei“进行初始化,将会发生什么?用此模式测试你的程序,检查你的答案是否正确。

C Primer&#xff08;第5版&#xff09; 练习 17.16 练习 17.16 如果前一题程序中的regex对象用"[^c]ei"进行初始化&#xff0c;将会发生什么&#xff1f;用此模式测试你的程序&#xff0c;检查你的答案是否正确。 环境&#xff1a;Linux Ubuntu&#xff08;云服务…

「C++系列」数据结构

文章目录 一、数据结构1. 线性数据结构2. 非线性数据结构3. 其他重要数据结构 二、定义数据结构1. 数组&#xff08;Array&#xff09;2. 链表&#xff08;LinkedList&#xff09;3. 栈&#xff08;Stack&#xff09; 三、指针、关键字1. 指针链表树 2. 关键字 四、相关链接 一…

【TCP/IP】UDP协议数据格式和报文格式

学习一个网络协议&#xff0c;主要就是学习“数据格式”/“报文格式” 源端口/目的端口 端口号是属于传输层的概念UDP 报头使用两个自己的长度来表示端口号之所以端口号的范围是 0~65535&#xff0c;是因为底层网络协议做出了强制要求如果使用一个 10 w 这样的端口&#xff0…

机器学习:多元线性回归模型

目录 前言 一、讲在前面 1.多元_血压.csv&#xff1a; 2.完整代码&#xff1a; 3.运行结果&#xff1a; 二、实现步骤 1.导入库 2.导入数据 3.绘制散点图&#xff08;这步可以省略&#xff09; ​编辑 4.求特征和标签的相关系数 5.建立并训练线性回归模型 6.检验模…

NtripShare全站仪自动化监测之气象改正

最近有幸和自动化监测领域权威专家进行交流&#xff0c;讨论到全站仪气象改正的问题&#xff0c;因为有些观点与专家不太一致&#xff0c;所以再次温习了一下全站仪气象改正的技术细节。 气象改正的概念 全站仪一般利用光波进行测距&#xff0c;首先仪器会处理测距光波的相位漂…

C++| QT图片调整透明度叠加

QT图片调整透明度叠加 实际效果界面UI放置控件设置布局界面自适应 代码项目工程的文件初始化按钮功能滑动条功能图片调整透明度叠加 实际效果 三个图片&#xff08;QLabel&#xff09;显示&#xff0c;两个按钮&#xff08;QPushButton&#xff09;加载图片&#xff0c;一个&a…

【Java学习】反射和枚举详解

所属专栏&#xff1a;Java学习 &#x1f341;1. 反射 在程序运行时&#xff0c;可以动态地创建对象、调用方法、访问和修改字段&#xff0c;以及获取类的各种属性信息&#xff08;如成员变量、方法、构造函数等&#xff09;&#xff0c;这种机制就称为反射 反射相关的类 类名用…

【算法】马踏棋盘(骑士周游)问题回溯算法实现以及使用贪心算法优化

目录 1.游戏规则 2.算法分析 3.解决步骤和思路 4.马踏棋盘算法的代码实现 4.1计算马儿还能走哪些位置 4.2马踏棋盘的核心代码 4.3马踏棋盘算法完整代码 4.4使用贪心算法进行优化 4.4.1思路 4.4.2代码实现 1.游戏规则 将马儿随机放在国际象棋的 8*8 棋盘的某个方格中…

阶段练习——minishell

目录 &#xff08;一&#xff09;文件复制&#xff08;my_cp函数&#xff09; &#xff08;二&#xff09;文件内容查看&#xff08;my_cat函数&#xff09; &#xff08;三&#xff09;切换目录&#xff08;my_cd函数&#xff09; &#xff08;四&#xff09;列出目录内容…

一款专为IntelliJ IDEA用户设计的插件,极大简化Spring项目中的API调试过程,功能强大(附源码)

前言 在软件开发过程中&#xff0c;尤其是Spring MVC(Boot)项目中&#xff0c;API调试调用是一项常见但繁琐的任务。现有的开发工具虽然提供了一些支持&#xff0c;但往往存在效率不高、操作复杂等问题。为了处理这些痛点&#xff0c;提升开发效率&#xff0c;一款新的工具应运…

python 捕获异常

捕获指定异常 e 是保存的异常信息 捕获多个异常

快速体验fastllm安装部署并支持AMD ROCm推理加速

序言 fastllm是纯c实现&#xff0c;无第三方依赖的高性能大模型推理库。 本文以国产海光DCU为例&#xff0c;在AMD ROCm平台下编译部署fastllm以实现LLMs模型推理加速。 测试平台&#xff1a;曙光超算互联网平台SCNet GPU/DCU&#xff1a;异构加速卡AI 显存64GB PCIE&#…

Selenium + Python 自动化测试18(数据驱动实现测试)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了数据驱动测试中如何读取Excel文件&#xff0c;今天我们试着进一步深入学习数据驱动。 本篇文章我们讨论一下如何使用数据驱动思想实现测试。 1、数据驱动框架…

从零开始学cv-5: 图像的仿射变换

文章目录 一&#xff0c;简介&#xff1a;二&#xff0c;图像仿射变换详解2.1&#xff0c;图像平移&#xff1a;2.2 &#xff0c;图像旋转&#xff1a;2.3&#xff0c;仿射变换&#xff1a; 一&#xff0c;简介&#xff1a; 仿射变换&#xff08;Affine Transformation 或 Aff…

Lumina学术引擎免费问世,性能超谷歌学术5倍

Lumina介绍 Lumina是一款完全免费的AI学术搜索引擎&#xff0c;借助强大的数据库和高效的匹配速度。利用超过 15 种模型从超过 100 万篇期刊文章中找出最相关的来源&#xff0c;从而构建答案。搜索结果相关性平均比谷歌学术高出5倍&#xff0c;支持超1亿研究对象搜索&#xff…

8.18日学习打卡---Spring Cloud Alibaba(五)

8.18日学习打卡 目录&#xff1a; 8.18日学习打卡 RocketMQ什么是RocketMQ生产者和消费者技术架构 RocketMQ安装与配置环境搭建与测试RocketMQ管理命令 RocketMQ发送消息普通消息顺序消息之全局消息顺序消息之局部消息消费者消费消息延迟消息延迟消息代码实现单向消息批量消息过…