Skip to content

Instantly share code, notes, and snippets.

@shelling
Last active December 24, 2015 05:59
Show Gist options
  • Select an option

  • Save shelling/6753735 to your computer and use it in GitHub Desktop.

Select an option

Save shelling/6753735 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cpuid.h>
double *
loadavg() {
double *load = malloc(3*sizeof(double));
getloadavg(load, 3);
return load;
}
void
cpuid(unsigned int level, unsigned int buffer[4]) {
__cpuid(level, buffer[0], buffer[1], buffer[2], buffer[3]);
}
char *
get_cpu_vendor() {
unsigned int buffer[4];
cpuid(0, buffer);
char *vendor = malloc(13*sizeof(char));
*(unsigned int *)&vendor[0] = buffer[1];
*(unsigned int *)&vendor[4] = buffer[3];
*(unsigned int *)&vendor[8] = buffer[2];
vendor[12] = '\0';
return vendor;
}
char *
get_cpu_name() {
unsigned int buffer[4];
char *cpuname = malloc(49*sizeof(char));
cpuid(0x80000000U, buffer);
cpuid(0x80000002U, (unsigned int *)&cpuname[0]);
cpuid(0x80000003U, (unsigned int *)&cpuname[16]);
cpuid(0x80000004U, (unsigned int *)&cpuname[32]);
cpuname[48] = '\0';
return cpuname;
}
int main(int argc, char **argv) {
printf("%s\n", get_cpu_vendor());
printf("%s\n", get_cpu_name());
double *l = loadavg();
printf("%.2f, %.2f, %.2f\n", l[0], l[1], l[2]);
return 0;
}
CC=gcc -std=c99
# CC=clang
LIB=-I/usr/lib/gcc/x86_64-linux-gnu/`gcc -dumpversion`/include/
.PHONY: all clean
all:
$(CC) $(LIB) cpuid.c
clean:
rm a.out
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment