From 842350fe2160f48fc67ca1449a30eab79e3f8c41 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Fri, 23 Mar 2012 03:39:12 +0100 Subject: seqreader --- seqreader.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 seqreader.c diff --git a/seqreader.c b/seqreader.c new file mode 100644 index 0000000..c589684 --- /dev/null +++ b/seqreader.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include +#include +#include + +#define BUFSIZE 65536 + +int main(int argc, char *argv[]) { + int err; + size_t SKIP = 1; + DIR *dir; + struct dirent *ent; + struct timeval start, tv; + size_t us; + size_t files = 0; + size_t total_size = 0; + size_t skip; + size_t run; + char buffer[65536]; + + if (argc < 2) { + printf("Usage: %s [skip]\n", argv[0]); + exit(0); + } + + chdir(argv[1]); + + if (argc > 2) { + SKIP = atoi(argv[2]); + + printf("Skip %i\n", SKIP); + } + + gettimeofday(&start, NULL); + for (run = 0; run < SKIP; run++) { + skip = 0; + dir = opendir("."); + while (ent = readdir(dir)) { + struct stat st; + + if (((skip++)%SKIP) != run) continue; + + if (stat(ent->d_name, &st)) continue; + if (!S_ISREG(st.st_mode)) continue; + + FILE *f = fopen(ent->d_name, "r"); + if (!f) continue; + + int size = st.st_blksize; + + if (size > BUFSIZE) { + printf("Buffer too small\n"); + exit(1); + } + + while (!feof(f)) { + err = fread(buffer, 1, size, f); + if (err < 0) { + printf("Read failed\n"); + exit(1); + } + } + + fclose(f); + + total_size += st.st_size; + files++; + + gettimeofday(&tv, NULL); + us = (tv.tv_sec - start.tv_sec) * 1000000 + (tv.tv_usec - start.tv_usec); + printf("Reading: %s (%lu MB), Read: %lu files (%lu GB), Measured speed: %lu mB/s\n", ent->d_name, st.st_size/1024/1024, files, total_size / 1024 / 1024 / 1024, total_size / us); + } + closedir(dir); + } + +} \ No newline at end of file -- cgit v1.2.1