Bajo Linux, el uso de la CPU del lenguaje C es

  

#include < stdio.h > #include < stdlib.h > #include < unistd.h > //encabezado del archivo de la estructura ocupada //declarar y ocupar La estructura {char name [20]; //define un tipo de char. El nombre de la matriz tiene 20 elementos sin signo int usuario; //define un int sin signo tipo de usuario unsigned int nice; //define un int sin firma Tipo de sistema int sin signo raro; //definir un sistema de tipo int no firmado int inactivo int firmado; //definir un tipo de inactividad int no firmado}; float g_cpu_used; //definir un tipo flotante global g_cpu_used int cpu_num; //Definir un tipo int global cup_num void cal_occupy (struct occupy *, struct occupy *); //declare una función sin tipo de escritura cal_occupy contiene dos parámetros de estructura void get_occupy (struct occupy *); //declarar una función sin tipo Get_occupy contiene un parámetro de estructura int main () //main function start {struct occupy ocpu [10]; //define la estructura de ocupación el nombre de la variable es ocpu con 10 elementos struct occupy ncpu [10]; //define la estructura de ocupación Variable El nombre es ncpu con 10 elementos int i; //Definir una variable int local i cpu_num = sysconf (_SC_NPROCESSORS_ONLN); //La llamada del sistema devuelve el número de cpus asignado a cpu_num para (;;) //infinite loop {sleep (1 Esperando 1 segundo get_occupy (ocpu); //llame a la función get para devolver la matriz de la estructura por primera vez sleep (1); //espere 1 segundo get_occupy (ncpu); //llame a la función get para recuperar la matriz de estructuras El segundo para (i = 0; i < cpu_num; i ++) //loop cpu_num-1 times {cal_occupy (&ocpu [i], &ncpu [i]); //llama a la función cal para devolver el conjunto de estructuras Printf ("% f \\ n ", g_cpu_used); //Imprimir el uso de g_cpu_used se muestra en 6 lugares decimales}}} void cal_occupy (struct occupy * o, struct occupy * n) //contiene dos para la función de cal sin tipo Las variables de puntero de la estructura de parámetros formales tipo O y N {double od, nd; //definen la variable real de precisión doble od, nd double id, sd; //definen la variable real de doble precisión id, sd double scale; Defina una escala de variable real real de doble precisión od = (doble) (o- > usuario + o- > agradable + o- > sistema + o- > inactivo); //primera vez (usuario + prioridad + sistema + inactivo) el tiempo se asigna a od nd = (duda Le) (n- > usuario + n- > agradable + n- > sistema + n- > inactivo); //La segunda vez (usuario + prioridad + sistema + inactivo) el tiempo se asigna a la escala od = 100.0 /(flotante) (nd-od); //100 excepto que la diferencia de conversión (nd-od) es el tipo de flotador y luego se asigna a la variable de escala id = (doble) (n- > usuario - o- > Usuario); //La diferencia entre la primera vez y la segunda vez que el usuario se asigna a id sd = (doble) (n- > sistema - o- > sistema); //sistema primera y segunda vez La diferencia en el tiempo se asigna a sd g_cpu_used = ((sd + id) * 100.0) /(nd-od); //((usuario + sistema) 乖 100) excepto (la primera y la segunda diferencia de tiempo) Asignado a g_cpu_used} void get_occupy (struct occupy * o) //El puntero a la función get sin tipo contiene una estructura de parámetros formal clase O {FILE * fd; //Definir el puntero del archivo fd int n; //Definir la variable local n Int type char buff [1024]; //Definir la matriz de buff variable local para que el tamaño del tipo char sea 1024 fd = fopen (" /proc /stat ", " r "); //Abrir el archivo de estadísticas en modo de lectura R Luego, asigne el puntero fd fgets (buff, sizeof (buff), fd); //lea la cadena de buff de longitud del archivo fd y guárdelo en el lugar inicial. La dirección es buff en este espacio para (n = 0; n < cpu_num; n + +) //loop cpu_num -1 veces {fgets (buff, tamaño de (buff), fd); //lee la longitud del buff del archivo fd La cadena se guarda en la dirección de inicio en el espacio buff. /* El siguiente es el resultado de convertir la cadena buff en el parámetro de estructura correspondiente de acuerdo con el formato del parámetro. * /Sscanf (buff, "% s% u % u% u% u, &o [n] .name, &o [n] .user, &o [n] .nice, &o [n] .system, &o [n] .idle); /* La siguiente es la salida incorrecta * /fprintf (stderr, "% s% u% u% u% u \\ n ", o [n] .name, o [n] .user, o [n ] .nice, o [n] .system, o [n] .idle);} fclose (fd); //cierra el archivo fd}

Copyright © Conocimiento de Windows All Rights Reserved