日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式分享
[導(dǎo)讀]在嵌入式Linux開發(fā)中,快速獲取系統(tǒng)狀態(tài)信息是調(diào)試和監(jiān)控的關(guān)鍵能力。本文整理了7個高頻使用的C語言代碼片段,涵蓋內(nèi)存、CPU溫度、文件操作等核心場景,幫助開發(fā)者高效實(shí)現(xiàn)系統(tǒng)狀態(tài)采集。


在嵌入式Linux開發(fā)中,快速獲取系統(tǒng)狀態(tài)信息是調(diào)試和監(jiān)控的關(guān)鍵能力。本文整理了7個高頻使用的C語言代碼片段,涵蓋內(nèi)存、CPU溫度、文件操作等核心場景,幫助開發(fā)者高效實(shí)現(xiàn)系統(tǒng)狀態(tài)采集。


1. 內(nèi)存信息采集

通過解析/proc/meminfo文件獲取系統(tǒng)內(nèi)存狀態(tài),這是嵌入式設(shè)備資源監(jiān)控的基礎(chǔ)操作:


c

#include <stdio.h>

#include <string.h>


void get_mem_info() {

   FILE *fp = fopen("/proc/meminfo", "r");

   if (!fp) return;


   char line[256];

   while (fgets(line, sizeof(line), fp)) {

       if (strstr(line, "MemTotal") || strstr(line, "MemFree")) {

           printf("%s", line);

       }

   }

   fclose(fp);

}

該代碼通過逐行掃描/proc/meminfo,提取總內(nèi)存和空閑內(nèi)存信息,適用于資源受限的嵌入式環(huán)境。


2. CPU溫度讀取

通過訪問/sys/class/thermal目錄獲取SoC溫度,適用于ARM架構(gòu)設(shè)備:


c

#include <stdio.h>


float get_cpu_temp() {

   FILE *fp = fopen("/sys/class/thermal/thermal_zone0/temp", "r");

   if (!fp) return -1;


   int temp;

   fscanf(fp, "%d", &temp);

   fclose(fp);

   return temp / 1000.0; // 轉(zhuǎn)換為攝氏度

}

注意不同廠商的路徑可能不同,需根據(jù)實(shí)際硬件調(diào)整路徑。


3. 文件大小獲取

使用標(biāo)準(zhǔn)C庫函數(shù)獲取文件大小,適用于日志文件監(jiān)控場景:


c

#include <sys/stat.h>


long get_file_size(const char *path) {

   struct stat st;

   if (stat(path, &st) == 0) {

       return st.st_size;

   }

   return -1;

}

該實(shí)現(xiàn)通過stat()系統(tǒng)調(diào)用獲取文件元數(shù)據(jù),比fseek+ftell組合更可靠。


4. 高精度時間戳

獲取微秒級時間戳,用于性能分析:


c

#include <sys/time.h>


long long get_timestamp() {

   struct timeval tv;

   gettimeofday(&tv, NULL);

   return (long long)tv.tv_sec * 1000000 + tv.tv_usec;

}

在無RT-Linux環(huán)境下,這是獲取高精度時間的標(biāo)準(zhǔn)方法。


5. MAC地址讀取

通過ioctl獲取網(wǎng)卡MAC地址:


c

#include <sys/ioctl.h>

#include <net/if.h>

#include <unistd.h>


void get_mac(const char *ifname, unsigned char *mac) {

   int fd = socket(AF_INET, SOCK_DGRAM, 0);

   struct ifreq ifr;

   strncpy(ifr.ifr_name, ifname, IFNAMSIZ);

   ioctl(fd, SIOCGIFHWADDR, &ifr);

   close(fd);

   memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);

}

需確保網(wǎng)絡(luò)接口已啟用,否則可能讀取失敗。


6. IP地址獲取

同樣使用ioctl獲取網(wǎng)卡IP地址:


c

void get_ip(const char *ifname, char *ip) {

   int fd = socket(AF_INET, SOCK_DGRAM, 0);

   struct ifreq ifr;

   strncpy(ifr.ifr_name, ifname, IFNAMSIZ);

   ioctl(fd, SIOCGIFADDR, &ifr);

   close(fd);

   // 提取IPv4地址

   struct sockaddr_in *addr = (struct sockaddr_in*)&ifr.ifr_addr;

   sprintf(ip, "%s", inet_ntoa(addr->sin_addr));

}

7. 磁盤空間監(jiān)控

通過statvfs獲取文件系統(tǒng)剩余空間:


c

#include <sys/statvfs.h>


long get_disk_free(const char *path) {

   struct statvfs vfs;

   if (statvfs(path, &vfs) == 0) {

       return vfs.f_bavail * vfs.f_frsize; // 剩余字節(jié)數(shù)

   }

   return -1;

}

這些代碼片段經(jīng)過實(shí)際項(xiàng)目驗(yàn)證,可直接集成到嵌入式Linux應(yīng)用中。建議根據(jù)具體硬件平臺調(diào)整路徑和錯誤處理邏輯,在資源受限設(shè)備上使用時注意優(yōu)化內(nèi)存和CPU占用。掌握這些基礎(chǔ)操作后,開發(fā)者可以快速構(gòu)建系統(tǒng)監(jiān)控框架,顯著提升調(diào)試效率。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀
關(guān)閉