//Получение частоты процессора и другой системной информации //Особенность - работа с файловой системой proc, парсинг оттуда системной информации //Также можно сделать с помощью perl #include #include #include #include /* _SC_CLK_TCK */ #include /* SIGALRM */ #include /* не используется */ #include /* struct tms */ #include /* struct tms */ struct tms tms_stop, tms_start; clock_t real_stop, real_start; clock_t HZ; /* число ticks в секунде */ /* Засечь время момента старта процесса */ void hello(void){ real_start = times(&tms_start); printf("%i\n",real_start); } /* Засечь время окончания процесса */ void bye(){ real_stop = times(&tms_stop); printf("%i\n",real_stop); clock_t HZ = sysconf(_SC_CLK_TCK); printf("Real time = %.5f seconds [%lu ticks]\n",(real_stop - real_start) / (double)HZ, real_stop - real_start); } int main() { FILE* fp; char buffer[1024]; size_t bytes_read; char* match; char* match2; float clock_speed; char smth[4096]; int i; //Засекаем новый таймер№2 unsigned long ini,end; rdtscl(ini); //Засекаем таймер №1 hello(); /* Открываем содержание файла cpuinfo из файловой системы proc */ fp = fopen ("/proc/cpuinfo", "r"); bytes_read = fread (buffer, 1, sizeof (buffer), fp); fclose (fp); /* Проверка на ошибку либо буфер заполнен до конца */ if (bytes_read == 0 || bytes_read == sizeof (buffer)) return 0; /* NUL-terminate the text. */ buffer[bytes_read] = '\0'; /* Находим в буфере нужные строчки и копируем */ match = strstr (buffer, "cpu MHz"); match2 = strstr (buffer, "model name"); if (match == NULL) return 0; /* Парсинг строчки для извлечения информации. Здесь приведены извлечение частоты и модели. В лабораторной нужны извлечь более полную информацию*/ sscanf (match, "cpu MHz : %f\n", &clock_speed); sscanf (match2, "model name : %s\n",&smth); //Вывод результата: printf ("CPU clock speed: %4.5f MHz\n", clock_speed); printf ("CPU model name: %s\n", smth); //Конец таймер №2 rdtscl(end); //Конец таймер №1, вывод результата bye(); //Вывод результата таймера №2 printf("Real time2 = %.5f seconds [%f ticks]\n",(float)(end - ini) / (clock_speed*1000000)); }