📄 dpmd.c
字号:
#include <ctype.h>#include <dirent.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include "dpmd.h"static struct dpmd_config dpmd_conf;#define DEFAULT_CONFIG_FILE "/usr/local/etc/dpmd.conf"struct dpmd_programs { char name[32]; struct dpmd_programs *next;};static struct dpmd_programs *programs;static unsigned int idle_time = 0;static int insert_dpmd_programs(char *progname){ struct dpmd_programs *prev, *prog; prev = prog = programs; while (prog) { prev = prog; prog = prog->next; } prog = (struct dpmd_programs *)malloc(sizeof(*prog)); if (!prog) { return -1; } memset(prog, 0, sizeof(*prog)); memcpy(prog->name, progname, 31); if (prev) prev->next = prog; else programs = prog; return 0;}static int free_dpmd_programs(void){ struct dpmd_programs *prog = programs; while (prog) { free(prog); prog = prog->next; } programs = 0L; return 0;}/* * Main routine */int main(int argc, char *argv[]){ int ch, ret; void *tmp; char *t_prog; char *config_file, *policy; struct dpmd_programs *prog; config_file = DEFAULT_CONFIG_FILE; while ((ch = getopt(argc, argv, "f:h")) != -1) { switch (ch) { case 'h': printf("dpmd [-f config_file] [-h]\n"); exit(-1); break; case 'f': config_file = optarg; break; default: break; } } parse_config(config_file, &dpmd_conf); t_prog = strtok(dpmd_conf.programs,","); do { if (t_prog == NULL) continue; insert_dpmd_programs(t_prog); } while ((t_prog = strtok(NULL,",")) != NULL); // Loop while (1) { ret = get_running_programs(); /* check for programs */ prog = programs; while (prog) { if ((ret = find_program(prog->name))) { policy = dpmd_conf.policy_high; idle_time = 0; break; } prog = prog->next; } /* check for cpu usage */ get_cpu(); cpu_parse(dpmd_conf.cpu_interval, &tmp); ret = cpu_evaluate(tmp); if (ret) { policy = dpmd_conf.policy_low; idle_time += dpmd_conf.poll_interval; } else { policy = dpmd_conf.policy_high; idle_time = 0; } /* apply the policy */ dpmd_set_policy(policy); if (idle_time >= (dpmd_conf.suspend_interval + dpmd_conf.poll_interval)) { idle_time = 0;// dpmd_suspend(); /* suspend the system */ } /* wait for poll_interval seconds */ sleep(dpmd_conf.poll_interval); } free_dpmd_programs(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -