Skip to content

Instantly share code, notes, and snippets.

/r_usage_read.c Secret

Created October 26, 2016 16:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/296edacc0085333d28b79e398d9e3bc4 to your computer and use it in GitHub Desktop.
Save anonymous/296edacc0085333d28b79e398d9e3bc4 to your computer and use it in GitHub Desktop.
r_usage_read.c - shared from CS50 IDE
/**
* r_usage_read.c
*
* The following code is licensed under CC BY-NC-SA 3.0
* https://creativecommons.org/licenses/by-nc-sa/3.0/
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/stat.h>
#include <fcntl.h>
// 100 MB
#define READAMOUNT 100000000
double calculate(const struct rusage* b, const struct rusage* a);
int main()
{
// Required structs for getrusage calls
struct rusage after1, before1, after2, before2;
int filedes = open("../jpg/card.raw", O_RDONLY);
void* buf = malloc(READAMOUNT);
// read READAMOUNT * 1 bytes
getrusage(RUSAGE_SELF, &before1);
read(filedes, buf, READAMOUNT);
getrusage(RUSAGE_SELF, &after1);
// read 1 * READAMOUNT bytes
getrusage(RUSAGE_SELF, &before2);
for (int i = 0; i < READAMOUNT; i++) {
read(filedes, buf, 1);
}
getrusage(RUSAGE_SELF, &after2);
// Calculate time spent
double time1 = calculate(&before1, &after1);
double time2 = calculate(&before2, &after2);
printf("Time spent reading READAMOUNT * 1 bytes: %f\n", time1);
printf("Time spent reading 1 * READAMOUNT bytes: %f\n", time2);
}
/**
* Returns number of seconds between b and a.
* The following code was written by David J. Malan of Harvard University.
*/
double calculate(const struct rusage* b, const struct rusage* a)
{
if (b == NULL || a == NULL)
{
return 0.0;
}
else
{
return ((((a->ru_utime.tv_sec * 1000000 + a->ru_utime.tv_usec) -
(b->ru_utime.tv_sec * 1000000 + b->ru_utime.tv_usec)) +
((a->ru_stime.tv_sec * 1000000 + a->ru_stime.tv_usec) -
(b->ru_stime.tv_sec * 1000000 + b->ru_stime.tv_usec)))
/ 1000000.0);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment