#include #include #include "processes.h" typedef unsigned int uint; typedef unsigned long int ulong; const ulong INIT_CAP = 1024; struct process { uint pid; uint ppid; char user[9]; float priority; ulong resident_size; ulong size; ulong virtual_size; char command[16]; }; struct processes { ulong size; ulong capacity; struct process* procs; }; struct processes* new_processes() { struct processes* p = malloc(sizeof(struct processes)); if (!p) { return NULL; } struct process* p_arr = malloc(INIT_CAP * sizeof(struct process)); if (!p_arr) { free(p); return NULL; } p->size = 0; p->capacity = INIT_CAP; p->procs = p_arr; return p; } void delete(struct processes* p) { free(p->procs); free(p); } int add_from_file(struct processes* ps, const char* filename) { FILE* f = fopen(filename, "r"); if (!f) { return 0; } struct process p; while (fscanf(f, "%u %u %8s %f %lu %lu %lu %15s\n", &p.pid, &p.ppid, p.user, &p.priority,&p.resident_size, &p.size, &p.virtual_size, p.command) == 8) { if (ps->size == ps->capacity) { ps->capacity *= 2; struct process* new_procs = realloc(ps->procs, ps->capacity * sizeof(struct process)); if (!new_procs) { return 0; } ps->procs = new_procs; } ps->procs[ps->size] = p; ps->size++; } }