1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言获取linux的CPU 内存 IO 磁盘 网速(本机编译通过)

c语言获取linux的CPU 内存 IO 磁盘 网速(本机编译通过)

时间:2019-04-23 03:28:17

相关推荐

c语言获取linux的CPU 内存 IO 磁盘 网速(本机编译通过)

代码:

#include <stdio.h> #include <stdlib.h> #include <unistd.h>#include <string.h> #define MAXBUFSIZE 1024#define WAIT_SECOND 3 //暂停时间,单位为“秒” typedef struct occupy { char name[20];unsigned int user; unsigned int nice; unsigned int system;unsigned int idle; } CPU_OCCUPY ; typedef struct PACKED {char name[20]; long total; char name2[20];long free; }MEM_OCCUPY;float g_cpu_used; int cpu_num;//定义一个全局的int类型cup_num void cal_occupy(CPU_OCCUPY *, CPU_OCCUPY *); void get_occupy(CPU_OCCUPY *); void get_mem_occupy(MEM_OCCUPY *) ;float get_io_occupy();void get_disk_occupy(char ** reused);void getCurrentDownloadRates(long int * save_rate);int main(){ CPU_OCCUPY ocpu,ncpu;MEM_OCCUPY mem;//获取cpu核数cpu_num = sysconf(_SC_NPROCESSORS_ONLN); printf("cpu mum:%d\n",cpu_num);//获取cpu使用率get_occupy(&ocpu); sleep(1); get_occupy(&ncpu); cal_occupy(&ocpu, &ncpu); printf("cpu used:%4.2f \n", g_cpu_used); //获取内存使用率get_mem_occupy(&mem);double using = ((double)(mem.total - mem.free)/mem.total)*100;printf("mem used:%4.2f\n",using);//获取io使用率printf("io used:%4.2f\n",get_io_occupy());//获取当前磁盘的使用率char t[20]="";char *used = t;get_disk_occupy(&used);//char used[20]=" " ;//get_disk_occupy((char **)&used);printf("disk used:%s\n",used);//网络延迟long int start_download_rates; //保存开始时的流量计数 long int end_download_rates; //保存结果时的流量计数 getCurrentDownloadRates(&start_download_rates);//获取当前流量,并保存在start_download_rates里 sleep(WAIT_SECOND); //休眠多少秒,这个值根据宏定义中的WAIT_SECOND的值来确定 getCurrentDownloadRates(&end_download_rates);//获取当前流量,并保存在end_download_rates里 printf("download is : %4.2f byte/s \n",( (float)(end_download_rates-start_download_rates))/WAIT_SECOND );}void cal_occupy (CPU_OCCUPY *o, CPU_OCCUPY *n){ double od, nd; double id, sd; double scale; od = (double) (o->user + o->nice + o->system +o->idle);//第一次(用户+优先级+系统+空闲)的时间再赋给od nd = (double) (n->user + n->nice + n->system +n->idle);//第二次(用户+优先级+系统+空闲)的时间再赋给od scale = 100.0 / (float)(nd-od); //100除强制转换(nd-od)之差为float类型再赋给scale这个变量 id = (double) (n->user - o->user); //用户第一次和第二次的时间之差再赋给id sd = (double) (n->system - o->system);//系统第一次和第二次的时间之差再赋给sd g_cpu_used = ((sd+id)*100.0)/(nd-od); //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used} void get_occupy (CPU_OCCUPY *o) { FILE *fd; int n; char buff[MAXBUFSIZE];fd = fopen ("/proc/stat", "r"); //这里只读取stat文件的第一行及cpu总信息,如需获取每核cpu的使用情况,请分析stat文件的接下来几行。fgets (buff, sizeof(buff), fd); sscanf (buff, "%s %u %u %u %u", o->name, &o->user, &o->nice,&o->system, &o->idle); fclose(fd);} void get_mem_occupy(MEM_OCCUPY * mem){FILE * fd;char buff[MAXBUFSIZE];fd = fopen("/proc/meminfo","r");fgets (buff, sizeof(buff), fd); sscanf (buff, "%s %ld", mem->name,&mem->total); fgets (buff, sizeof(buff), fd); sscanf (buff, "%s %ld", mem->name2,&mem->free); }float get_io_occupy(){char cmd[] ="iostat -d -x";char buffer[MAXBUFSIZE]; char a[20]; float arr[20];FILE* pipe = popen(cmd, "r"); if (!pipe) return -1; fgets(buffer, sizeof(buffer), pipe);fgets(buffer, sizeof(buffer), pipe);fgets(buffer, sizeof(buffer), pipe);fgets(buffer, sizeof(buffer), pipe);sscanf(buffer,"%s %f %f %f %f %f %f %f %f %f %f %f %f %f ",a,&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6],&arr[7],&arr[8],&arr[9],&arr[10],&arr[11],&arr[12]);//printf("%f\n",arr[12]);return arr[12];pclose(pipe); }void get_disk_occupy(char ** reused){char currentDirectoryPath[ MAXBUFSIZE ];getcwd(currentDirectoryPath, MAXBUFSIZE);//printf("当前目录:%s\n",currentDirectoryPath);char cmd[50]="df ";strcat(cmd,currentDirectoryPath);//printf("%s\n",cmd);char buffer[MAXBUFSIZE];FILE* pipe = popen(cmd, "r"); char fileSys[20];char blocks[20];char used[20];char free[20];char percent[10];char moment[20];if (!pipe) return ; if(fgets(buffer, sizeof(buffer), pipe)!=NULL){sscanf(buffer,"%s %s %s %s %s %s",fileSys,blocks,used,free,percent,moment);}if(fgets(buffer, sizeof(buffer), pipe)!=NULL){sscanf(buffer,"%s %s %s %s %s %s",fileSys,blocks,used,free,percent,moment);}//printf("desk used:%s\n",percent);strcpy(*reused,percent);return ;}void getCurrentDownloadRates(long int * save_rate) { char intface[] = "eth0:"; //这是网络接口名,根据主机配置//char intface[] = "wlan0:";FILE * net_dev_file; char buffer[1024]; size_t bytes_read; char * match; if ( (net_dev_file=fopen("/proc/net/dev", "r")) == NULL ){ printf("open file /proc/net/dev/ error!\n"); exit(EXIT_FAILURE); } int i = 0;while(i++<20){if(fgets(buffer, sizeof(buffer), net_dev_file)!=NULL){if(strstr(buffer,intface)!=NULL){//printf("%d %s\n",i,buffer);sscanf(buffer,"%s %ld",buffer,save_rate);break;}}}if(i==20) *save_rate=0.01;fclose(net_dev_file); //关闭文件 return ; }

打印结果:

cpu mum:4cpu used:1.25 mem used:70.30io used:0.10disk used:4%download is : 4963.33 byte/s

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。