#include "useinfo.h" void get_usage_info(struct rusage **info) { (*info) = (struct rusage *)malloc(sizeof(struct rusage)); getrusage(RUSAGE_SELF, *info); } float user_time_info(struct rusage *info1, struct rusage *info2) { float utime; utime = (info2->ru_utime).tv_sec - (info1->ru_utime).tv_sec + ((info2->ru_utime).tv_usec - (info1->ru_utime).tv_usec) * 0.000001; return utime * 1000000; /* we want it in milliseconds */ } float system_time_info(struct rusage *info1, struct rusage *info2) { float stime; stime = (info2->ru_stime).tv_sec - (info1->ru_stime).tv_sec + ((info2->ru_stime).tv_usec - (info1->ru_stime).tv_usec) * 0.000001; return stime * 1000000; /* we want it in milliseconds */ } void print_usage_info(struct rusage *info1, struct rusage *info2) { float utime, stime; utime = (info2->ru_utime).tv_sec - (info1->ru_utime).tv_sec + ((info2->ru_utime).tv_usec - (info1->ru_utime).tv_usec) * 0.000001; stime = (info2->ru_stime).tv_sec - (info1->ru_stime).tv_sec + ((info2->ru_stime).tv_usec - (info1->ru_stime).tv_usec) * 0.000001; printf("User time: %f\n", utime); printf("System time: %f\n", stime); printf("Max resident set size: %ld\n", info2->ru_maxrss); printf("Integral shared text memory size: %ld\n", info2->ru_ixrss); printf("Integral unshared data size: %ld\n", info2->ru_idrss); printf("Integral unshared stack size: %ld\n", info2->ru_isrss); printf("Page reclaims: %ld\n", info2->ru_minflt); printf("Page faults: %ld\n", info2->ru_majflt); printf("Swaps: %ld\n", info2->ru_nswap); printf("Block input operations: %ld\n", info2->ru_inblock); printf("Block output operations: %ld\n", info2->ru_oublock); printf("Messages sent: %ld\n", info2->ru_msgsnd); printf("Messages received: %ld\n", info2->ru_msgrcv); printf("Signals received: %ld\n", info2->ru_nsignals); printf("Voluntary context switches: %ld\n", info2->ru_nvcsw); printf("Involuntary context switches: %ld\n", info2->ru_nivcsw); }