- Get link
- X
- Other Apps
Featured Post
Posted by
Unknown
on
- Get link
- X
- Other Apps
Here is a simple implementation which reads the CPU information for a linux/unix kernel.
It uses the /proc/cpuinfo file for this purpose , which is a standard file present in the linux/unix system containing info about the CPU.
I have only extracted two parameters viz. CPU Clock Speed and CPU Cache Size.
There is a whole list of Parameters which can be fetched.
It can be seen by seeing the contents of /proc/cpuinfo file using by using following command on the terminal:
cat /proc/envinfo
It uses the /proc/cpuinfo file for this purpose , which is a standard file present in the linux/unix system containing info about the CPU.
I have only extracted two parameters viz. CPU Clock Speed and CPU Cache Size.
There is a whole list of Parameters which can be fetched.
It can be seen by seeing the contents of /proc/cpuinfo file using by using following command on the terminal:
cat /proc/envinfo
#include <stdio.h>
#include <string.h>
/*This functions returns matched param's value in a buffer*/
char* get_param_val(char* buffer, char *param_name)
{
char* match;
match = strstr (buffer, param_name);
if (match == NULL)
return NULL;
return match;
}
void get_cpu_params ()
{
FILE* fp;
char buffer[1024];
size_t bytes_read;
float clock_speed;
int cache_size;
char modelname[100];
/* Read the entire contents of /proc/cpuinfo into the buffer. */
fp = fopen ("/proc/cpuinfo", "r");
bytes_read = fread (buffer, 1, sizeof (buffer), fp);
fclose (fp);
/* Return if read failed or if buffer isn't big enough. */
if (bytes_read == 0 || bytes_read == sizeof (buffer))
return ;
buffer[bytes_read] = '\0';
sscanf (get_param_val(buffer,"cpu MHz"), "cpu MHz : %f", &clock_speed);
printf ("CPU clock speed: %f MHz\n",clock_speed);
sscanf (get_param_val(buffer,"cache size"), "cache size : %d", &cache_size);
printf ("CPU cache size: %d KB\n",cache_size);
}
int main ()
{
get_cpu_params ();
return 0;
}
Comments
Hi this programs give sefmentattion fault at line 34
ReplyDeletecan you please post the solution
ReplyDeleteHey I corrected the seg fault , i made a small mistake of writing CPU instead of cpu...used gdb to find it...thanks the mistake was silly but i learnt to use gdb i guess i someday had to...:P...trying to read other parameters...struggling with model name ...doesn't print a damn word...no seg faults though : D !!
ReplyDelete