gpt4 book ai didi

C - sysinfo() 返回错误值 i686

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:12 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的程序来在 ram 已满时提醒我,但是我在 sysinfo() 方面遇到了一些问题,示例程序是 C 语言的,我从一个带有示例的网站上抓取了它代码似乎没问题,为什么会发生这种情况的任何想法?抱歉我的英语不是我的母语...

代码如下:

/* sysinfo.c by detour@metalshell.com
*
* Display the uptime, load averages, total ram, free ram,
* shared ram, buffered ram, total swap, free swap, and
* number of processes running on a linux machine.
*
* http://www.metalshell.com/
*
*/

#include <sys/sysinfo.h>
#include <stdio.h>

int main() {
int days, hours, mins;
struct sysinfo sys_info;

if(sysinfo(&sys_info) != 0)
perror("sysinfo");

// Uptime
days = sys_info.uptime / 86400;
hours = (sys_info.uptime / 3600) - (days * 24);
mins = (sys_info.uptime / 60) - (days * 1440) - (hours * 60);

printf("Uptime: %ddays, %dhours, %dminutes, %ldseconds\n",
days, hours, mins, sys_info.uptime % 60);

// Load Averages for 1,5 and 15 minutes
printf("Load Avgs: 1min(%ld) 5min(%ld) 15min(%ld)\n",
sys_info.loads[0], sys_info.loads[1], sys_info.loads[2]);

// Total and free ram.
printf("Total Ram: %ldk\tFree: %ldk\n", sys_info.totalram / 1024,
sys_info.freeram / 1024);

// Shared and buffered ram.
printf("Shared Ram: %ldk\n", sys_info.sharedram / 1024);
printf("Buffered Ram: %ldk\n", sys_info.bufferram / 1024);

// Swap space
printf("Total Swap: %ldk\tFree: %ldk\n", sys_info.totalswap / 1024,
sys_info.freeswap / 1024);

// Number of processes currently running.
printf("Number of processes: %d\n", sys_info.procs);

return 0;
}

最佳答案

在重读了您尝试使用 sysinfo 的内容并阅读了 sysinfo 的手册页之后,我知道它的结果可能会困扰您什么。如果这不是您的问题,那么您将需要发布更多内容(例如上述程序的实际输出和关于它有什么问题以及您认为这是错误的原因的评论)。

旧版本的 Linux 有一个不同版本的 sysinfo,它与当前版本非常相似,但不兼容。在其结构中添加了一些字段,并且对内存字段的含义进行了轻微更改。这些字段现在需要与 mem_unit 字段一起进行解释。这是因为某些机器的内存可能超过一个长整数所能表达的内存。

这种情况在 32 位 x86 上变得有些普遍,其中一些机器安装了超过 2^32 (4gb) 的 RAM。我怀疑这可能是你的问题,因为你的程序根本没有提到 mem_unit

我认为如果你尝试:

 printf("Total Ram: %lluk\tFree: %lluk\n",
sys_info.totalram *(unsigned long long)sys_info.mem_unit / 1024,
sys_info.freeram *(unsigned long long)sys_info.mem_unit/ 1024);

然后该行可能会开始产生对您更有意义的输出。在处理 RAM 的其他行上进行类似的更改也应该使它们更有意义。

关于C - sysinfo() 返回错误值 i686,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4229415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com