Skip to content

Instantly share code, notes, and snippets.

/r_usage_fread.c Secret

Created October 26, 2016 16:55
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/90289d3d52fd952914c5e2ad329292de to your computer and use it in GitHub Desktop.
Save anonymous/90289d3d52fd952914c5e2ad329292de to your computer and use it in GitHub Desktop.
r_usage_fread.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>
// 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;
FILE* filehandle = fopen("../jpg/card.raw", "rb");
void* buf = malloc(READAMOUNT);
// read READAMOUNT * 1 bytes
getrusage(RUSAGE_SELF, &before1);
fread(buf, READAMOUNT, 1, filehandle);
getrusage(RUSAGE_SELF, &after1);
rewind(filehandle);
// read 1 * READAMOUNT bytes
getrusage(RUSAGE_SELF, &before2);
fread(buf, 1, READAMOUNT, filehandle);
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