From 29fc5bbb3f45e70cf4ecc46df0e0bd05168fb9e8 Mon Sep 17 00:00:00 2001 From: Abdellah El Morabit Date: Mon, 23 Jun 2025 16:52:57 +0200 Subject: [PATCH] Added the source and build files I've wwritten up till now. --- build/cpu | Bin 0 -> 33712 bytes build/cpu_linux | Bin 0 -> 16288 bytes build/disk | Bin 0 -> 34600 bytes build/general | Bin 0 -> 15640 bytes build/ram | Bin 0 -> 33712 bytes source/cpu.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++ source/disk.c | 84 +++++++++++++++++++ source/general.c | 72 ++++++++++++++++ source/ram.c | 145 ++++++++++++++++++++++++++++++++ 9 files changed, 510 insertions(+) create mode 100755 build/cpu create mode 100755 build/cpu_linux create mode 100755 build/disk create mode 100755 build/general create mode 100755 build/ram create mode 100644 source/cpu.c create mode 100644 source/disk.c create mode 100644 source/general.c create mode 100644 source/ram.c diff --git a/build/cpu b/build/cpu new file mode 100755 index 0000000000000000000000000000000000000000..ba6063dece697c1f2fea63a7fb312d9ce874d7f1 GIT binary patch literal 33712 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 QFJ(VY-NK&aG4QbBUp<;MTL1t6 literal 0 HcmV?d00001 diff --git a/build/disk b/build/disk new file mode 100755 index 0000000000000000000000000000000000000000..16d6264c9bf1a54ad34163b46b233670149e98b3 GIT binary patch literal 34600 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 K-XCxXuCq6Pl)y7hP>( zvE9bhfe8*2zu3V*gAO{GVDV*xp)i@ajxkZ8RH)K21$6`0L9G9C^CWwcF%*VhTgETwLTZi8ywQn$77*~Zppi57~P zTo}5}lRO77Q0w-_j`qTCGv8YnQfVrgW+Bs4EGHgzc63O%GY5f5x+Qx)nyvlhqs_wH`KM)>H6lTw(M?rtwVs;NKxxT zP*hk{LbdK6vTef+^La4Vh&Mam^3*LbBwtRhowJ?Wn|3rdY|ovML{VMvMJBDuQjcg( z9#JYG^~o+zpn2HxC*TVsVY3dZURKJDW&-VQv}Mp1s9j`_a%zv;?F8m8vj;4D6GhYt+q7}Z=SR1O)_k;(Jo^x09;gGVR0RsCFt%Y| z@_NYwh?@18ex>fi`Xo;TzLFVvDvdm;lP-N>$>l&kS2}Y_rLgv- zyVSerc6b+M-T{?3H@{3RrZLCf=XNZ=*rimvw8>CX2vjDrpYm2Fayi^x{=uQh@H1x4%J!j{FNBD?&87CP zz(741(Ei>2o_Nf!1AbqxKcbf79ct~MFBn$1qws@?DD8`qGG4nnNIX~Kt-@SV;+waSC#)enX`sD zBECV@+EKbW**3Mg?ARN>{MIz~gX`0UPimiz{d8 +#include +#include +#include + +#include +#include +#include +#include + +uint64_t get_cpu_freq(void) +{ + uint64_t freq = 0; + size_t size = sizeof(freq); + + if (sysctlbyname("hw.cpufrequency", &freq, &size, NULL, 0) < 0) + { + perror("sysctl"); + } + return freq; +} + +char* get_cpu_name(void) +{ + char* cpu_name; + size_t size = sizeof(cpu_name); + if (sysctlbyname("ker.hostname", &cpu_name, &size, NULL, 0) < 0) + perror("sysctl"); + + return cpu_name; +} + +void get_cpu_temperature(void) +{ + uint16_t cpu_temperature; + size_t size = sizeof(cpu_temperature); + +} + +int main(int argc, char **argv) +{ + + printf("compiled for __APPLE__"); + if (argc > 1) + { + if (strcmp(argv[1], "frequency") == 0) + printf("argument received"); + } + printf("%llu", get_cpu_freq()); + return 0; +} + +#endif + +// GNU/Linux +#ifdef __gnu_linux__ + +#include +#include +#include +#include + +#include +#include +#include + +#define MAXC 1024 +#define MAXC_CHAR 256 + +void cpu_name(void); +void cpu_temperature(unsigned short delay); +char* cpu_frequency(void); + +int main(int argc, char **argv) +{ + printf("compiled for __gnu_linux__"); + if (argc > 1) + { + if (strcmp(argv[1], "frequency") == 0) + { + printf("starting the process of getting the CPU frequency\n"); + while (1) { + + sleep(1); + printf("%s", cpu_frequency()); + } + } + + else if (strcmp(argv[1], "name") == 0) + { + printf("starting the process of getting the CPU name\n"); + cpu_name(); + } + else if (strcmp(argv[1], "temperature") == 0) + { + printf("CPU temperature:\n"); + cpu_temperature(1); + } + } + else + printf("no arguments passed, try again with : frequency, temperature or name"); + return 0; +} + +void cpu_name(void) +{ + int buffer_size = 256; + char cpu_name[buffer_size]; + + FILE *fp = fopen("/proc/cpuinfo", "r"); + if (!fp) + printf("can't open /proc/cpuinfo"); + + char line[buffer_size]; + while (fgets(line, sizeof(line), fp)) + { + if (strncmp(line, "model name", 10) == 0) + { + char *colon = strchr(line, ':'); + if (colon) + { + snprintf(cpu_name, buffer_size, "%s", colon + 2); + cpu_name[strcspn(cpu_name, "\n")] = 0; + int err = fclose(fp); + if (err != 0) + printf("error closing /proc/cpuinfo"); + + } + } + } + + printf("%s", cpu_name); + snprintf(cpu_name, buffer_size, "%s", cpu_name); + // dont know what the snprintf is doing here but removing it gives a segmentation fault + // so im keeping it here :) +} + +void cpu_temperature(unsigned short delay) +{ + while (1) + { + sleep(delay); + FILE *pf = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); + // error handling in case of not being able to open /sys/class/thermal/.. + if (!pf) + printf("error reading /proc/cpuinfo"); + + char buffer[MAXC]; + while (fgets(buffer, sizeof(buffer), pf)) + { + int a = atoi(buffer); + a /= 1000; + printf("%dC\n", a); + fflush(stdout); + } + fclose(pf); + } +} + +char* cpu_frequency(void) { + char* buffer = malloc(MAXC_CHAR); + + FILE *fp = fopen("/proc/cpuinfo", "r"); + if (!fp) { + printf("can't open /proc/cpuinfo"); + return NULL; + } + + while (fgets(buffer, MAXC_CHAR, fp)) { + if (strstr(buffer, "cpu MHz") != NULL) + { + char *colon = strchr(buffer, ':'); + if (colon) + { + buffer[strcspn(buffer, "\n")] = 0; + snprintf(buffer, MAXC_CHAR, "%s", colon); + } + } + + fclose(fp); + return buffer; + } + return NULL; +} + + + +#endif diff --git a/source/disk.c b/source/disk.c new file mode 100644 index 0000000..0608eb2 --- /dev/null +++ b/source/disk.c @@ -0,0 +1,84 @@ +/* + * ===================================================================================== + * + * Filename: disk.c + * + * Description: retrieving disk information from the device + * + * Version: 1.0 + * Created: 04/08/2025 01:33:30 + * Revision: none + * Compiler: gcc + * + * Author: nasr + * Organization: synf + * + * ===================================================================================== + */ + +#include +#include +#include +#include + +void disk_size(); +char* disk_partitions(); + +typedef struct { + + char* partition_name; + unsigned long parition_size; + +} partition; + +typedef struct { + partition* paritions; + long total_disk_size; +} disk; + + +void get_disk() +{ + CFMutableDictionaryRef match_dict = IOServiceMatching("IOMedia"); + if (!match_dict) { + printf("failed to create match directory"); + } + + CFDictionarySetValue(match_dict, CFSTR("Whole"), kCFBooleanTrue); + + io_iterator_t iter; + kern_return_t kr = IOServiceGetMatchingServices(kIOMainPortDefault, match_dict, &iter); + if (kr != KERN_SUCCESS) { + printf("Error matching services"); + } + + io_object_t service; + while ((service = IOIteratorNext(iter))) { + CFStringRef bsdName = IORegistryEntryCreateCFProperty(service, CFSTR("BSD Name"), kCFAllocatorDefault, 0); + if (bsdName) { + char name[1024]; + CFStringGetCString(bsdName, name, sizeof(name), kCFStringEncodingUTF8); + printf("Disk: /dev/%s\n", name); + CFRelease(bsdName); + } + + CFNumberRef sizeRef = IORegistryEntryCreateCFProperty(service, CFSTR("Size"), kCFAllocatorDefault, 0); + if (sizeRef) { + long long size = 0; + CFNumberGetValue(sizeRef, kCFNumberLongLongType, &size); + printf(" Size: %lld bytes\n", size); + CFRelease(sizeRef); + } + + IOObjectRelease(service); + } + + IOObjectRelease(iter); +} + + +int main(int argc, char** argv) +{ + return 0; +} + diff --git a/source/general.c b/source/general.c new file mode 100644 index 0000000..7569984 --- /dev/null +++ b/source/general.c @@ -0,0 +1,72 @@ +/* + * ===================================================================================== + * + * Filename: general.c + * + * Description: Retrieving basic information about the device + * + * Version: 1.0 + * Created: 05/08/2025 22:22:00 + * Revision: none + * Compiler: clang + * + * Author: nasr, + * Organization: synf + * + * ===================================================================================== */ + +// OSX +#ifdef __APPLE__ + +#include +#include +#include + +long device_up_time(void); + +int main(int argc, char** argv) +{ + + return 0; +} + +long device_up_time(void){ + + struct timeval boottime; + size_t len = sizeof(boottime); + + if (sysctlbyname("kern.boottime", &boottime, len, NULL, 0) == -1){ + perror("sysctl error"); + return 1; + } +} + +#endif + +// GNU LINUX +#ifdef __gnu_linux__ + +#include +#include +#include + +long device_up_time(void); + +int main(int argc, char** argv) +{ + printf("The total uptime is (seconds): %lu", device_up_time()); + return 0; +} + +long device_up_time(void) +{ + struct sysinfo info; + if (sysinfo(&info) == -1) + perror("sysinfo"); + + return info.uptime; +} + +#endif + + diff --git a/source/ram.c b/source/ram.c new file mode 100644 index 0000000..fa54ddb --- /dev/null +++ b/source/ram.c @@ -0,0 +1,145 @@ +/* + * ===================================================================================== + * + * Filename: ram.c + * + * Description: retrieve ram information from the device + * + * Version: 1.0 + * Created: 04/08/2025 01:34:33 + * Revision: none + * Compiler: gcc + * + * Author: nasr + * Organization: synf + * + * =====================================================================================*/ + +// OSX +#ifdef __APPLE__ + +#include +#include +#include +#include +#include + +#define CONVERT_BYTES_TO_GIGABYTES 107374182 + +typedef struct { + unsigned long mem_size; +} ram; + +unsigned long get_total(void); +unsigned long get_usage(void); + + +unsigned long get_usage(void) +{ + + struct rusage usage; + if(0 == getrusage(RUSAGE_SELF, &usage)) + return usage.ru_maxrss / CONVERT_BYTES_TO_GIGABYTES ; + else + return 0; +} + +unsigned long get_mem(void){ + + int mib[2]; + size_t size; + uint64_t ram_size; + + mib[0] = CTL_HW; + mib[1] = HW_MEMSIZE; + + size = sizeof(ram_size); + if (sysctl(mib, 2, &ram_size, &size, NULL, 0) == -1) { + perror("sysctl"); + } + + return ram_size; + +} + +int main() +{ + printf("%lu", get_mem()); + return 0; +} + + +#endif + +#ifdef __gnu_linux__ + +#include +#include + +typedef struct +{ + unsigned long mem_size; +} ram; + +unsigned long get_total(void); +unsigned long get_usage(void); + + +int main() +{ + printf("compiled for __gnu_linux__"); + if (argc > 1) + { + if (strcmp(argv[1], "total") == 0) + { + printf("Get the total ram usage"); + while (1) { + + sleep(1); + printf("%s", get_total()); + } + } + + else if (strcmp(argv[1], "name") == 0) + { + printf("Get the ram usage"); + printf("%lu", get_usage()); + } + } + else + printf("no arguments passed, try again with : frequency, temperature or name"); + return 0; + return 0; +} + +unsigned long get_total(void){ + + struct sysinfo info; + + if (sysinfo(&info) != 0) { + perror("sysinfo"); + return 1; + } + + long total_ram = info.totalram * info.mem_unit; + return total_ram; + +} + +unsigned long get_usage(void) +{ + struct sysinfo info; + + if (sysinfo(&info) != 0) { + perror("sysinfo"); + return 1; + } + + long total_ram = info.totalram * info.mem_unit; + long free_ram = info.freeram * info.mem_unit; + + return total_ram - free_ram; + } + +#endif +