#include #include #include int main() { struct cpu_raw_data_t raw; struct cpu_id_t data; double cpu_clock; // Get raw CPU data if (cpuid_get_raw_data(&raw) < 0) { fprintf(stderr, "Error getting raw CPU data: %s\n", cpuid_error()); return 1; } // Decode data if (cpu_identify(&raw, &data) < 0) { fprintf(stderr, "Error identifying CPU: %s\n", cpuid_error()); return 1; } // Get current clock frequency cpu_clock = cpu_clock_by_os(); if (cpu_clock < 0) { fprintf(stderr, "Error retrieving clock frequency: %s\n", cpuid_error()); return 1; } // Check if vendor and model are non-empty strings if (data.vendor_str == NULL || strlen(data.vendor_str) == 0) { fprintf(stderr, "Error: Vendor string is empty or NULL.\n"); return 1; } if (data.brand_str == NULL || strlen(data.brand_str) == 0) { fprintf(stderr, "Error: Model string is empty or NULL.\n"); return 1; } if (data.num_cores <= 0) { fprintf(stderr, "Error: Number of cores is not greater than 0.\n"); return 1; } if (data.num_logical_cpus <= 0) { fprintf(stderr, "Error: Number of logical CPUs is not greater than 0.\n"); return 1; } // Print basic CPU information printf("Vendor: %s\n", data.vendor_str); printf("Model: %s\n", data.brand_str); printf("Family: %d\n", data.family); printf("Model: %d\n", data.model); printf("Stepping: %d\n", data.stepping); printf("Current clock frequency: %.2f MHz\n", cpu_clock); printf("Cores: %d\n", data.num_cores); printf("Logical CPUs: %d\n", data.num_logical_cpus); return 0; }