首页 > 系统相关 >linux物理内存,虚拟内存的获取

linux物理内存,虚拟内存的获取

时间:2024-03-31 09:00:48浏览次数:13  
标签:std meminfo long 内存 file linux include 虚拟内存

使用文件流的方式,解析   cat /proc/meminfo 文件里面的数据

 

#include <iostream>  
#include <fstream>  
#include <sstream>  
#include <string>  
#include <unordered_map>  
#include <map>

struct BASE_INFO_S{
    unsigned long long MemTotalMb; //总的物理内存
    unsigned long long MemUsedMb;  //已使用的物理内存

    unsigned long long SwapTotalMb;//总的虚拟内存
    unsigned long long SwapUsedMb;//已使用的虚拟内存


};

// cat /proc/meminfo
std::map<std::string, std::string> parseMeminfo() {  
    //std::unordered_map<std::string, std::string> meminfo;  
    std::map<std::string, std::string> meminfo;  
    std::ifstream file("/proc/meminfo");  
    std::string line;  
  
    if (file.is_open()) {  
        while (std::getline(file, line)) {  
            std::istringstream iss(line);  
            std::string key, value;  
            if (!(iss >> key >> value)) continue;  
            meminfo[key] = value;  
        }  
        file.close();  
    } else {  
        std::cerr << "Error: Could not open /proc/meminfo" << std::endl;  
    }  

    std::cout<<"========================================================="<<std::endl;
    for(auto it = meminfo.begin(); it != meminfo.end(); ++it){
        std::cout << it->first << ": " << it->second << std::endl;
    }
    std::cout<<"========================================================="<<std::endl;

    BASE_INFO_S baseInfo={0};
    baseInfo.MemTotalMb = std::stoll(meminfo["MemTotal:"]) / 1;
    baseInfo.MemUsedMb = (std::stoll(meminfo["MemTotal:"]) - std::stoll(meminfo["MemFree:"]) - std::stoll(meminfo["Buffers:"]) - std::stoll(meminfo["Cached:"])) / 1;

    baseInfo.SwapTotalMb = std::stoll(meminfo["SwapTotal:"]) / 1;
    baseInfo.SwapUsedMb = (std::stoll(meminfo["SwapTotal:"]) - std::stoll(meminfo["SwapFree:"])) / 1;

    std::cout<<"MemTotalMb:"<<baseInfo.MemTotalMb<<std::endl;
    std::cout<<"MemUsedMb:"<<baseInfo.MemUsedMb<<std::endl;
    std::cout<<"SwapTotalMb:"<<baseInfo.SwapTotalMb<<std::endl;
    std::cout<<"SwapUsedMb:"<<baseInfo.SwapUsedMb<<std::endl;
    return meminfo;  
}  
  
int main() {  
    auto meminfo = parseMeminfo();  
    return 0;  
}

 

标签:std,meminfo,long,内存,file,linux,include,虚拟内存
From: https://www.cnblogs.com/music-liang/p/18106372

相关文章

  • Linux服务器准备java运行环境
    安装JAVA下检查是否安装了JAVAjava-version提示"java:commandnotfound"则表示没有安装,如果安装了会显示JAVA版本信息CentOS安装JAVAsudoyuminstalljava-11-openjdk-devel 安装完成再执行一下:java-version 说明安装成功,没问题设置环境变量设置JAVA_HO......
  • Linux 给网卡配置ip
    ipaddr|grepeth9ifconfigeth910.0.0.2netmask255.255.255.0up......
  • Arch linux下安装bochs失败解决
    1.首先打开terminalsudovim/etc/pacman.conf[archlinuxcn]Server=https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch2.然后运行:如果Arch版本较新则在pacman-Sarchlinuxcn-keyring前运行pacman-key--lsign-key"[email protected]"正常情况:pacman-S......
  • [linux] ubuntu 下安装qtcreate遇到“无法加载Qt平台插件‘xcb’问题”解决方案
    [linux]ubuntu下安装qtcreate遇到“无法加载Qt平台插件‘xcb’问题”解决方案以下是遇到的三种报错情况From6.5.0,xcb-cursor0orlibxcb-cursor0isneededtoloadtheQtxcbplatformplugin.CouldnotloadtheQtplatformplugin“xcb”in“”eventhough......
  • linux---简单模拟实现shell(内置命令的解析)
    准备工作的知识我们要模拟实现一个命令行解释器的话,需要运用进程替换的知识。我们用我,如花,王婆,实习生的例子来说:这里的“我”就是程序员,如花是操作系统,王婆是命令行解释器bash,实习生则是子进程,我们用户想要和操作系统交流的话,就需要通过bash,而命令行解释器(王婆)不会自己去执行......
  • Linux下history命令简单原理
    前言在我们平时操作linux服务器时,有时候需要使用之前操作过的命令,这个时候history就派上用场了,它会记录你的历史操作命令。使用历史记录会持久化存储,默认位置是当前用户目录下的.bash_history文件。当Linux系统启动一个Shell时,Shell会从.bash_history文件中,读取......
  • LInux: fork()究竟是如何工作的?为何一个变量能够接受两个返回值?
    LInux:fork函数究竟是如何工作的?为何一个变量能够接受两个返回值?前言一、fork()用法二、fork()应用实例展示三、fork()工作原理3.1为什么要创建子进程?3.2fork()究竟干了些什么?3.3fork为什么会存在两个返回值?3.5为何fork函数中父进程返回子进程的pid、子进程返回0?3.......
  • linux CentOS 7.9 安装 ffmpeg 6.0 教程【亲测成功】
    查看当前系统版本[[email protected]]#lsb_release-aLSBVersion::core-4.1-amd64:core-4.1-noarchDistributorID:CentOSDescription:CentOSLinuxrelease7.9.2009(Core)Release:7.9.2009Codename:Corewgethttp://www.ffmpeg.org/......
  • Acunetix v24.3 (Linux, Windows) - Web 应用程序安全测试
    Acunetixv24.3(Linux,Windows)-Web应用程序安全测试Acunetix|WebApplicationSecurityScanner请访问原文链接:https://sysin.org/blog/acunetix/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org重要提示AcunetixPremium现在使用日历化版本命名。请注意,从......
  • linux进程状态
    目录1.进程状态分类1.1进程状态查看  2.Z(zombie)-僵尸进程 2.1pid 2.2 僵尸进程危害 3. 孤儿进程4.理论4.1运行态 4.2阻塞态(S,D)4.3挂起态 4.4进程的切换1.进程状态分类CPU内存在很多寄存器看看下面的状态在kernel源代码里定义:/**The......