`

linux sysinfo函数使用方法--获取内存大小

 
阅读更多
http://hi.baidu.com/%C0%CB%C2%FE%B5%C4%D0%A1%D0%AB%D7%D3/blog/item/1a3fef35202d4344251f1430.html

Linux中,sysinfo是用来获取系统相关信息的结构体。
函数声明和原型:
#include<sys/sysinfo.h>

intsysinfo(structsysinfo*info);

结构体信息:
在Linux2.3.16中,结构体的信息是(单位是字节):

structsysinfo{
long uptime;
/*启动到现在经过的时间*/
unsignedlongloads[3];
/*1,5,and15minuteloadaverages */
unsignedlongtotalram;/*总的可用的内存大小*/
unsignedlongfreeram;/*还未被使用的内存大小*/
unsignedlongsharedram;/*共享的存储器的大小*/
unsignedlongbufferram;/*缓冲区大小*/
unsignedlongtotalswap;/*交换区大小*/
unsignedlongfreeswap;/*还可用的交换区大小*/
unsignedshortprocs;/*当前进程数目*/
char _f[22];/*64字节的补丁结构*/
};

在Linux2.3.23(i386),2.3.48(allarchitectures)中,结构体的信息是(单位是mem_unit字节):

structsysinfo{
long uptime;/*启动到现在经过的时间*/
unsignedlongloads[3];
/*1,5,and15minuteloadaverages */
unsignedlongtotalram;/*总的可用的内存大小*/
unsignedlongfreeram;/*还未被使用的内存大小*/
unsignedlongsharedram;/*共享的存储器的大小*/
unsignedlongbufferram;/*共享的存储器的大小*/
unsignedlongtotalswap;/*交换区大小*/
unsignedlongfreeswap;/*还可用的交换区大小*/
unsignedshortprocs;/*当前进程数目*/
unsignedlongtotalhigh;/*总的高内存大小*/
unsignedlongfreehigh;/*可用的高内存大小*/
unsignedintmem_unit;/*以字节为单位的内存大小*/
char_f[20-2*sizeof(long)-sizeof(int)];
/*libc5的补丁
};

返回值:
操作成功返回0,错误返回-1;
样例:
#include<stdio.h>

#include<linux/unistd.h>/*包含调用_syscallX宏等相关信息*/
#include<linux/kernel.h>/*包含sysinfo结构体信息*/

_syscall1(int,sysinfo,structsysinfo*,info);
//usingnamespacestd;
intmain(intargc,char*agrv[])
{
structsysinfos_info;
interror;

error=sysinfo(&s_info);
printf("\n\ncodeerror=%d\n",error);
printf("Uptime=%ds\nLoad:1min%d/5min%d/15min%d\n"
"RAM:total%d/free%d/shared%d\n"
"Memoryinbuffers=%d\nSwap:total%d/free%d\n"
"Numberofprocesses=%d\n",
s_info.uptime,s_info.loads[0],
s_info.loads[1],s_info.loads[2],
s_info.totalram,s_info.freeram,
s_info.totalswap,s_info.freeswap,
s_info.procs );
return0;
}

/*输出结果:
/home/chenhd/future>./Sysinfo_1
codeerror=0
Uptime=154s
Load:1min22976/5min13888/15min5408
RAM:total128307200/free55656448/shared263168000
Memoryinbuffers=263168000
Swap:total50/free1073821804
Numberofprocesses=1073823352
/home/chenhd/future>
*/

// an example
int main()
{
FILE *fp;
char str[81];
memset(str,0,81);
fp=popen("cat /proc/meminfo | grep MemTotal:|sed -e 's/.*:[^0-9]//'","r");
if(fp < 0)
{
printf("无法读取ram信息\n");
exit(1);
}
fgets(str,80,fp);
fclose(fp);
if (cpuinfo != NULL)
{
strncpy(cpuinfo,str,80);
}
#include <linux/unistd.h> /* 包含调用 _syscallX 宏等相关信息*/

#include <linux/kernel.h> /* 包含sysinfo结构体信息*/
#include <sys/sysinfo.h>
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);

gulong spd=atoi(str);
printf("您ram是%lu kb %s %lu\n",spd, str, s_info.totalram);
return spd;
}
分享到:
评论

相关推荐

    linux-内存及flash使用情况查询.pdf

    sysinfo()是一个系统调用函数,它直接与内核通信,获取内存使用信息。它的一个优点是不依赖于文件系统,即使在proc文件系统不可用的情况下,也可以获取内存信息。使用sysinfo()函数可以获取包括总内存、空闲内存、已...

    linux-c-api-ref.zip_linux api_linux-c-api-ref

    10. **系统信息获取**:`sysinfo()`、`uname()`、`getpid()`、`getppid()`等函数用于获取系统、进程等相关信息。 以上只是Linux C API中的一部分核心知识点,实际的API包含更多内容,如进程间通信(IPC)、定时器、...

    QT/C++实时获取CPU和内存的使用率

    在Windows系统中,我们可以使用`GetSystemTimes`函数来获取CPU使用时间,并通过`GlobalMemoryStatusEx`获取内存使用信息。在Linux和macOS中,我们可以读取`/proc/stat`和`/proc/meminfo`文件,这些文件包含了系统的...

    读取内存_读取内存_

    - 在Windows系统中,可以使用`GlobalMemoryStatusEx`或`GetProcessMemoryInfo`函数获取内存信息,它们提供了关于系统总内存、可用内存以及特定进程内存使用的数据。 - 在Linux系统中,可以读取 `/proc/meminfo` ...

    sysinfo:通过golang获取linux系统信息(cpu,内存,磁盘等)

    在Golang中获取Linux系统的详细信息,如CPU使用率、内存状态和磁盘I/O,是一种常见的需求,特别是在开发监控工具、性能分析软件或者运维自动化脚本时。`sysinfo`是一个开源库,它提供了简单易用的API来实现这些功能...

    LINUX C 函数

    Linux C函数使用手册是一份详尽的参考资料,旨在帮助开发者理解和掌握C语言在Linux环境下的运用。下面,我们将深入探讨一些重要的Linux C函数,并了解它们在实际编程中的应用。 1. **标准输入/输出(stdio.h)** -...

    Python库 | jk_sysinfo-0.2020.11.23.tar.gz

    2. **硬件信息**:CPU型号、核心数、频率,内存大小,硬盘信息等。 3. **网络信息**:网络接口、IP地址、网关、DNS设置等。 4. **进程和系统负载**:当前运行的进程数量、CPU和内存占用情况、系统负载等。 5. **环境...

    LinuxC语言函数详解

    以上只是Linux C语言函数海洋中的一部分,实际开发中还有更多如I/O复用(`select()`、`poll()`、`epoll`)、定时器(`setitimer()`)、系统信息获取(`sysinfo()`)等高级主题。理解和熟练运用这些函数是成为Linux...

    程序中获取linux系统启动时间方法

    总的来说,通过使用`sysinfo`结构体,开发者可以在应用程序中获取到Linux系统的启动时间,以及其他关键的系统状态信息,从而实现更全面的系统监控和诊断。这个功能在系统管理、故障排查以及性能优化等方面都有重要...

    linux获取系统启动时间示例详解

    该函数使用`sysinfo()`函数获取`sysinfo`结构体中的信息,并利用`time()`函数获取当前的时间戳。 ```c #include #include &lt;sys/sysinfo.h&gt; #include #include static int print_system_boot_time() { struct ...

    解读CPU 主板 硬盘 显卡 内存 系统信息

    在C/C++中,可以使用`sysinfo.h`或Windows API的`GlobalMemoryStatusEx`函数获取内存信息。 操作系统是协调硬件和软件的桥梁,提供用户界面和应用程序接口。Windows、Linux和macOS是常见的桌面操作系统,它们都有...

    Linux C库函数

    3. 数组和内存管理:`stdlib.h`头文件提供了数组和内存管理的函数,例如`malloc()`和`free()`用于动态内存分配和释放,`calloc()`用于初始化内存分配,`realloc()`调整已分配内存大小。 4. 数学运算:`math.h`...

    GNU C Library Reference

    《GNU C Library Reference》是GNU项目的一个重要组成部分,它提供了对...《GNU C Library Reference》这本书就是学习这些知识的重要参考资料,它详细阐述了每个函数的使用方法和注意事项,是Linux程序员的必备工具书。

    php-dmidecode:使用PHP将dmidecode解析为数组的极其简单快捷的方法

    4. 处理解析后的数据:现在你可以遍历返回的数组,访问其中的子数组来获取具体的硬件信息,如CPU型号、内存大小、主板制造商等。例如: ```php foreach ($output['System Information'] as $sysInfo) { echo ...

    C语言编程实例100.rar

    这通常需要用到操作系统提供的API或者特定的库函数,例如在Unix/Linux系统中,可以使用sysinfo或procfs来获取硬件信息。 “文件操作”这部分,你会学习到C++如何打开、读写、关闭文件,以及如何处理文件流。这包括...

    利用windows性能计数器进行服务器性能监控示例分享

    在这个方法中,可以获取系统盘的大小信息。然而,完整的磁盘性能监控通常需要考虑更多的因素,比如磁盘读写速率(`% Disk Time`,`Disk Read Bytes/sec`,`Disk Write Bytes/sec`等)以及磁盘队列长度等。这些可以...

Global site tag (gtag.js) - Google Analytics