<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 嵌入式Linux:proc文件系統

嵌入式Linux:proc文件系統

發(fā)布人:美男子玩編程 時(shí)間:2024-08-22 來(lái)源:工程師 發(fā)布文章

proc 文件系統是一個(gè)虛擬文件系統,它以文件系統的形式為應用層提供訪(fǎng)問(wèn)系統內核數據的接口。用戶(hù)和應用程序可以通過(guò) proc 文件系統獲取系統信息和進(jìn)程相關(guān)信息,對 proc 文件系統的讀寫(xiě)相當于與內核進(jìn)行通信。然而,與普通文件不同,proc 文件系統是動(dòng)態(tài)創(chuàng )建的,文件本身并不存在于磁盤(pán)中,只存在于內存中。因此,它被稱(chēng)為虛擬文件系統,類(lèi)似于 devfs。

proc 文件系統特點(diǎn)如下:

  • 動(dòng)態(tài)創(chuàng )建proc 文件系統中的文件是動(dòng)態(tài)生成的,實(shí)時(shí)反映系統和進(jìn)程的狀態(tài)。

  • 內核信息訪(fǎng)問(wèn)最初,proc 文件系統是為了提供有關(guān)系統中進(jìn)程的信息,但由于其高效和便捷,很多內核信息也開(kāi)始通過(guò)它進(jìn)行報告或啟用動(dòng)態(tài)運行時(shí)配置。

  • 可視化數據內核將運行時(shí)的一些關(guān)鍵數據以文件的形式呈現在 proc 文件系統的特定文件中,使得應用層可以以可視化方式訪(fǎng)問(wèn)這些數據結構。

proc 文件系統通常掛載在系統的 /proc 目錄下。對于內核開(kāi)發(fā)者(如驅動(dòng)開(kāi)發(fā)工程師)來(lái)說(shuō),proc 文件系統提供了一種調試內核的方法:通過(guò)查看 /proc/xxx 文件,可以獲取內核特定數據結構的值,對比添加新功能前后的數據變化,從而判斷該功能的影響是否合理。

在 /proc 目錄下包含了一些重要的目錄和虛擬文件如下所示:


圖片


在 /proc 目錄下,可以看到許多以數字命名的文件夾,例如 100038、2299、98560 等。這些數字對應的是各個(gè)進(jìn)程的 PID(進(jìn)程標識符)。每個(gè)進(jìn)程在內核中都有一個(gè)唯一的編號,即 PID,用來(lái)區分不同的進(jìn)程。這些以數字命名的文件夾中記錄了各個(gè)進(jìn)程的相關(guān)信息。不同的信息通過(guò)不同的虛擬文件呈現。

以下是對 /proc 目錄下各個(gè)文件和子目錄的詳細說(shuō)明:

進(jìn)程相關(guān)信息

  • /proc/[pid]每個(gè)正在運行的進(jìn)程都有一個(gè)對應的目錄,[pid] 是進(jìn)程的 ID,包含了關(guān)于該進(jìn)程的各種信息。

    • /proc/[pid]/cmdline啟動(dòng)該進(jìn)程的命令行參數。

    • /proc/[pid]/cwd指向進(jìn)程當前的工作目錄的符號鏈接。

    • /proc/[pid]/environ進(jìn)程的環(huán)境變量。

    • /proc/[pid]/exe指向進(jìn)程的可執行文件的符號鏈接。

    • /proc/[pid]/fd/包含指向進(jìn)程打開(kāi)的文件描述符的符號鏈接。

    • /proc/[pid]/stat進(jìn)程的狀態(tài)信息,包含進(jìn)程的詳細狀態(tài)。

    • /proc/[pid]/status進(jìn)程的狀態(tài)信息,以更易讀的格式顯示。

系統相關(guān)信息

  • /proc/cpuinfo關(guān)于 CPU 的詳細信息,包括每個(gè) CPU 的型號、頻率、緩存大小等。

  • /proc/meminfo關(guān)于系統內存的詳細信息,包括總內存、可用內存、緩存大小等。

  • /proc/uptime系統啟動(dòng)后的時(shí)間和空閑時(shí)間。

  • /proc/version內核版本信息,包括編譯者和編譯時(shí)間。

  • /proc/loadavg系統負載平均值,顯示最近 1、5、15 分鐘的系統平均負載。

  • /proc/filesystems內核支持的文件系統列表。

  • /proc/sys/內核參數的配置,通過(guò)該目錄可以調整和查看內核參數。

其他有用的虛擬文件

  • /proc/cmdline內核啟動(dòng)參數。

  • /proc/iomemIO 設備的內存使用情況。

  • /proc/interrupts顯示被占用的中斷號和占用者相關(guān)的信息。

  • /proc/ioportsIO 端口的使用情況。

  • /proc/kcore系統物理內存映像,不可讀取,一般用于內核調試。

  • /proc/loadavg系統平均負載。

  • /proc/meminfo物理內存和交換分區使用情況。

  • /proc/modules當前加載的內核模塊列表。

  • /proc/mounts當前掛載的文件系統列表。

  • /proc/partitions系統識別的分區表。

  • /proc/swaps交換分區的利用情況。

  • /proc/version內核版本信息。

  • /proc/uptime系統運行時(shí)間。

1

使用 cat 命令讀取 /proc 文件系統

cat 命令是一個(gè)簡(jiǎn)單且常用的方式來(lái)讀取 /proc 目錄下的虛擬文件。

查看內核版本:


cat /proc/version

輸出類(lèi)似于:


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

輸出類(lèi)似于:


0.00 0.01 0.05 1/103 1234

2

在應用程序中使用open()和read()函數讀取/proc文件系統

在編程中,可以使用標準的文件操作函數來(lái)讀取 /proc 文件系統中的內容。以下是一個(gè)簡(jiǎn)單的 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] = '';        printf("%s", buffer);    }     if (bytesRead == -1) {        perror("read");        close(fd);        exit(EXIT_FAILURE);    }     close(fd);} int main() {    read_proc_file("/proc/version");    return 0;}

輸出類(lèi)似于:


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

通過(guò) cat 命令和編程接口,用戶(hù)和開(kāi)發(fā)者可以方便地訪(fǎng)問(wèn)和讀取 /proc 文件系統中的實(shí)時(shí)信息。這些信息對于系統監控、調試和優(yōu)化非常有用。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 嵌入式 Linux

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>