linux系统获取CPU、内存、存储空间信息
实现思路
学到了两种实现思路:
- 从/proc目录下获取设备的信息
代码实现:
void getMemoryInfo()
{
/*
此函数获取内存信息
*/
char MemTotal[256];
char MemFree[256];
char filename[] = "/proc/meminfo"; //文件名
FILE *fp;
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
}
int start=0;
while (!feof(fp)&&start<2) //在这里读取的时候回多出一行,我使用 fgetc(fp) != EOF代替了
{
if(start==0){
fgets(MemTotal,256,fp);
printf("%s\n", MemTotal); //输出
}else if(start==1){
fgets(MemFree,256,fp);
printf("%s\n", MemFree); //输出
break;
}
start++;
}
fclose(fp);
int MemTotal_int=StringToInteger(MemTotal);
int MemFree_int=StringToInteger(MemFree);
printf("%d\n",MemTotal_int);
printf("%d\n",MemFree_int);
}
这里有写了一个提取Char中的int 的函数:
int StringToInteger(char*p)
{
int value=0;
while(*p!='\0')
{
if((*p>='0')&&(*p<='9'))
{
value=value*10+*p-'0';
}
p++;
}
return value;
}
对于读取硬盘信息的方法:
double getHardDiskInfo()
{
/*
这里返回可用的存储空间
*/
int fd;
unsigned long numblocks=0;
fd = open("/dev/sda", O_RDONLY);
ioctl(fd, BLKGETSIZE64, &numblocks);
close(fd);
printf("Number of blocks: %ld, this makes %.3f GB\n",numblocks, (double)numblocks * 512.0 / (1024 * 1024 * 1024));
return (double)numblocks * 512.0 / (1024 * 1024 * 1024);
}
- 再一种实现思想是通过system()调用命令符,然后使用popen()返回命令符结果,再对返回的字符串进行解析