#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <dirent.h>

#include <time.h>

void get_memory_info(char *buf, long long int *total, long long int *free) {

char path[64] = "/proc/meminfo";

FILE *fp = fopen(path, "r");

if (fp == NULL) {

perror("fopen");

return;

}

 

char line[256];

while (fgets(line, sizeof(line), fp)) {

if (strncmp(line, "MemTotal:", 8) == 0) {

*total = atoll(line + 8);

} else if (strncmp(line, "MemFree:", 7) == 0) {

*free = atoll(line + 7);

} else if (strncmp(line, "Buffers:", 7) == 0) {

*total += atoll(line + 7);

} else if (strncmp(line, "Cached:", 6) == 0) {

*total += atoll(line + 6);

}

}

fclose(fp);

}

void get_cpu_info(char *buf, double *user, double *system, double *idle) {

char path[64] = "/proc/stat";

FILE *fp = fopen(path, "r");

if (fp == NULL) {

perror("fopen");

return;

}

char line[256];

while (fgets(line, sizeof(line), fp)) {

if (strncmp(line, "cpu ", 4) == 0) {

sscanf(line, "cpu %lf %lf %lf", user, system, idle);

break;

}

}

fclose(fp);

}

 

int main() {

long long int total_memory, free_memory;

double user_cpu, system_cpu, idle_cpu;

time_t now;

struct tm *ltm;

char time_buf[32];

char mem_info[128], cpu_info[128];

get_memory_info(mem_info, &total_memory, &free_memory);

get_cpu_info(cpu_info, &user_cpu, &system_cpu, &idle_cpu);

now = time(NULL);

ltm = localtime(&now);

strftime(time_buf, sizeof(time_buf), "%Y-%m-%d %H:%M:%S", ltm);

printf("Memory usage: %lld MB total / %lld MB free

", total_memory / 1024 / 1024, free_memory / 1024 / 1024);

printf("CPU usage: %.2lf%% user / %.2lf%% system / %.2lf%% idle

", user_cpu * 100, system_cpu * 100, idle_cpu * 100);

printf("Time: %s

", time_buf);

printf("Memory info:%s", mem_info);

printf("CPU info:%s", cpu_info);

return 0;

}

这段代码定义了两个函数get_memory_info和get_cpu_info,分别用于获取内存和CPU使用信息。

 

 

11-03 16:07