-
-
Save anonymous/90289d3d52fd952914c5e2ad329292de to your computer and use it in GitHub Desktop.
r_usage_fread.c - shared from CS50 IDE
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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