我曾经有过从正在运行的应用程序中确定以下性能参数的任务:
代码必须在Windows和Linux上运行.尽管这似乎是一项标准任务,但在手册(WIN32 API,GNU文档)以及Internet上查找必要的信息花了我好几天,因为关于这个主题的信息太多不完整/不正确/过时了发现了那里.
为了避免其他人遇到同样的麻烦,我认为收集所有分散的信息以及我在一个地方通过反复试验找到的信息是个好主意.
我刚编写了以下C++函数来以编程方式确定系统安装了多少RAM.它有效,但在我看来应该有一个更简单的方法来做到这一点.有人能告诉我,如果我错过了什么吗?
getRAM()
{
FILE* stream = popen( "head -n1 /proc/meminfo", "r" );
std::ostringstream output;
int bufsize = 128;
while( !feof( stream ) && !ferror( stream ))
{
char buf[bufsize];
int bytesRead = fread( buf, 1, bufsize, stream );
output.write( buf, bytesRead );
}
std::string result = output.str();
std::string label, ram;
std::istringstream iss(result);
iss >> label;
iss >> ram;
return ram;
}
Run Code Online (Sandbox Code Playgroud)
首先,我popen("head -n1 /proc/meminfo")
用来从系统中获取meminfo文件的第一行.该命令的输出看起来像
MemTotal:775280 kB
一旦我得到了输出istringstream
,就很容易将它标记为获取我想要的信息.我的问题是,是否有更简单的方法来读取此命令的输出?是否有标准的C++库调用来读取系统RAM的数量?