色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 嵌入式Linux:proc文件系統(tǒng)

          嵌入式Linux:proc文件系統(tǒng)

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

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

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

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

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

          • 可視化數(shù)據(jù)內(nèi)核將運(yùn)行時(shí)的一些關(guān)鍵數(shù)據(jù)以文件的形式呈現(xiàn)在 proc 文件系統(tǒng)的特定文件中,使得應(yīng)用層可以以可視化方式訪問這些數(shù)據(jù)結(jié)構(gòu)。

          proc 文件系統(tǒng)通常掛載在系統(tǒng)的 /proc 目錄下。對(duì)于內(nèi)核開發(fā)者(如驅(qū)動(dòng)開發(fā)工程師)來說,proc 文件系統(tǒng)提供了一種調(diào)試內(nèi)核的方法:通過查看 /proc/xxx 文件,可以獲取內(nèi)核特定數(shù)據(jù)結(jié)構(gòu)的值,對(duì)比添加新功能前后的數(shù)據(jù)變化,從而判斷該功能的影響是否合理。

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


          圖片


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

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

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

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

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

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

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

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

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

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

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

          系統(tǒng)相關(guān)信息

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

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

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

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

          • /proc/loadavg系統(tǒng)負(fù)載平均值,顯示最近 1、5、15 分鐘的系統(tǒng)平均負(fù)載。

          • /proc/filesystems內(nèi)核支持的文件系統(tǒng)列表。

          • /proc/sys/內(nèi)核參數(shù)的配置,通過該目錄可以調(diào)整和查看內(nèi)核參數(shù)。

          其他有用的虛擬文件

          • /proc/cmdline內(nèi)核啟動(dòng)參數(shù)。

          • /proc/iomemIO 設(shè)備的內(nèi)存使用情況。

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

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

          • /proc/kcore系統(tǒng)物理內(nèi)存映像,不可讀取,一般用于內(nèi)核調(diào)試。

          • /proc/loadavg系統(tǒng)平均負(fù)載。

          • /proc/meminfo物理內(nèi)存和交換分區(qū)使用情況。

          • /proc/modules當(dāng)前加載的內(nèi)核模塊列表。

          • /proc/mounts當(dāng)前掛載的文件系統(tǒng)列表。

          • /proc/partitions系統(tǒng)識(shí)別的分區(qū)表。

          • /proc/swaps交換分區(qū)的利用情況。

          • /proc/version內(nèi)核版本信息。

          • /proc/uptime系統(tǒng)運(yùn)行時(shí)間。

          1

          使用 cat 命令讀取 /proc 文件系統(tǒng)

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

          查看內(nèi)核版本:


          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

          查看系統(tǒng)負(fù)載:


          cat /proc/loadavg

          輸出類似于:


          0.00 0.01 0.05 1/103 1234

          2

          在應(yīng)用程序中使用open()和read()函數(shù)讀取/proc文件系統(tǒng)

          在編程中,可以使用標(biāo)準(zhǔn)的文件操作函數(shù)來讀取 /proc 文件系統(tǒng)中的內(nèi)容。以下是一個(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;}

          輸出類似于:


          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 命令和編程接口,用戶和開發(fā)者可以方便地訪問和讀取 /proc 文件系統(tǒng)中的實(shí)時(shí)信息。這些信息對(duì)于系統(tǒng)監(jiān)控、調(diào)試和優(yōu)化非常有用。


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



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

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉