溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣利用C++實現Linux系統的監控

發布時間:2024-12-14 17:44:55 來源:億速云 閱讀:103 作者:小樊 欄目:云計算

在Linux系統中,有多種方法可以實現監控。這里,我將向您展示如何使用C++和一些常用的Linux庫來實現系統監控。

  1. 使用sys/sysinfo.h庫獲取系統信息:
#include <iostream>
#include <sys/sysinfo.h>

int main() {
    struct sysinfo info;
    if (sysinfo(&info) != 0) {
        std::cerr << "獲取系統信息失敗" << std::endl;
        return 1;
    }

    std::cout << "系統內存大小: " << info.totalram / (1024 * 1024) << "MB" << std::endl;
    std::cout << "可用內存大小: " << info.freeram / (1024 * 1024) << "MB" << std::endl;
    std::cout << "系統負載: " << info.loads[0] / (double)sysconf(_SC_NPROCESSORS_ONLN) << std::endl;

    return 0;
}
  1. 使用/proc/stat文件獲取CPU和內存使用情況:
#include <iostream>
#include <fstream>
#include <string>

void read_cpu_info(const std::string &filename) {
    std::ifstream file(filename);
    if (!file.is_open()) {
        std::cerr << "打開文件失敗" << std::endl;
        return;
    }

    std::string line;
    long long user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice;
    while (getline(file, line)) {
        sscanf(line.c_str(), "%lld %lld %lld %lld %lld %lld %lld %lld %lld %lld",
               &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal, &guest, &guest_nice);
        std::cout << "用戶態CPU使用率: " << user / (double)sysconf(_SC_CLK_TCK) << "%" << std::endl;
        std::cout << "系統態CPU使用率: " << system / (double)sysconf(_SC_CLK_TCK) << "%" << std::endl;
        std::cout << "空閑CPU時間: " << idle / (double)sysconf(_SC_CLK_TCK) << "%" << std::endl;
    }
}

void read_mem_info(const std::string &filename) {
    std::ifstream file(filename);
    if (!file.is_open()) {
        std::cerr << "打開文件失敗" << std::endl;
        return;
    }

    std::string line;
    long long memtotal, memfree, buffers, cached, shmmem;
    while (getline(file, line)) {
        sscanf(line.c_str(), "%lld %lld %lld %lld %lld", &memtotal, &memfree, &buffers, &cached, &shmmem);
        std::cout << "總內存大小: " << memtotal / (1024 * 1024) << "MB" << std::endl;
        std::cout << "可用內存大小: " << memfree / (1024 * 1024) << "MB" << std::endl;
    }
}

int main() {
    read_cpu_info("/proc/stat");
    read_mem_info("/proc/meminfo");

    return 0;
}
  1. 使用inotify-tools庫監控文件系統事件:

首先,您需要安裝inotify-tools庫。在Debian和Ubuntu系統中,可以使用以下命令安裝:

sudo apt-get install inotify-tools

在CentOS和RHEL系統中,可以使用以下命令安裝:

sudo yum install inotify-tools

接下來,您可以使用以下C++代碼監控文件系統事件:

#include <iostream>
#include <inotify.h>
#include <sys/inotify.h>
#include <unistd.h>

#define EVENT_SIZE  ( sizeof (struct inotify_event) )
#define BUF_LEN     ( 1024 * ( EVENT_SIZE + 16 ) )

int main() {
    int length, i = 0;
    int fd = inotify_init();
    if (fd < 0) {
        std::cerr << "inotify_init失敗" << std::endl;
        return 1;
    }

    int wd = inotify_add_watch(fd, "/path/to/monitor", IN_MODIFY | IN_CREATE | IN_DELETE);
    if (wd < 0) {
        std::cerr << "inotify_add_watch失敗" << std::endl;
        close(fd);
        return 1;
    }

    char buffer[BUF_LEN];
    while (1) {
        length = read(fd, buffer, BUF_LEN);
        if (length < 0) {
            std::cerr << "read失敗" << std::endl;
            break;
        }

        while (i < length) {
            struct inotify_event *event = (struct inotify_event *)&buffer[i];
            if (event->len) {
                if (event->mask & IN_CREATE) {
                    std::cout << "文件或目錄已創建" << std::endl;
                } else if (event->mask & IN_DELETE) {
                    std::cout << "文件或目錄已被刪除" << std::endl;
                } else if (event->mask & IN_MODIFY) {
                    std::cout << "文件或目錄已修改" << std::endl;
                }
            }
            i += EVENT_SIZE + event->len;
        }
        i = 0;
    }

    inotify_rm_watch(fd, wd);
    close(fd);

    return 0;
}

請注意,您需要將/path/to/monitor替換為您要監控的文件或目錄的路徑。

這些方法可以幫助您實現Linux系統的監控。您可以根據自己的需求選擇合適的方法,并根據需要進行調整。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女