diff options
-rw-r--r-- | seqreader.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/seqreader.c b/seqreader.c index 1a13cf9..e0afe67 100644 --- a/seqreader.c +++ b/seqreader.c @@ -11,8 +11,8 @@ #include <string.h> #include <errno.h> -#define BUFSIZE 1048576//65536 -#define BLOCK_SIZE 16384//16384 +#define BUFSIZE 65536 +#define BLOCK_SIZE 16384 #define WRITE_INTERVAL 1 @@ -28,7 +28,9 @@ int main(int argc, char *argv[]) { size_t last_write = 0; size_t skip; size_t run; + ssize_t res; char buffer[BUFSIZE]; + long double mcoef = 1000000. / (1024 * 1024); if (argc < 2) { printf("Usage: %s <directory|device> [skip]\n", argv[0]); @@ -42,25 +44,33 @@ int main(int argc, char *argv[]) { exit(1); } - int size = BLOCK_SIZE; + size_t size = BLOCK_SIZE; gettimeofday(&start, NULL); - err = read(fd, buffer, size); - while (err > 0) { - total_size += err; + res = read(fd, buffer, size); + while (res > 0) { + if (res != size) { + printf("Incomplete read: %zu bytes read instead of %zu\n", res, size); + exit(-1); + } + total_size += res; gettimeofday(&tv, NULL); us = (tv.tv_sec - start.tv_sec) * 1000000 + (tv.tv_usec - start.tv_usec); if ((us - last_write) > WRITE_INTERVAL * 1000000) { last_write = us; - printf("Reading: %s (%lu GB), Measured speed: %lu mB/s\n", argv[0], total_size / 1024 / 1024 / 1024, total_size / us); + printf("Reading: %s (%lu GB), Measured speed: %zu MB/s\n", argv[0], total_size / 1024 / 1024 / 1024, (size_t)(mcoef * total_size / us)); } - err = read(fd, buffer, size); + res = read(fd, buffer, size); } close(fd); + if (res < 0) { + printf("Read failed with errno %i\n", errno); + exit(-1); + } return 0; } @@ -110,7 +120,7 @@ int main(int argc, char *argv[]) { 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); + printf("Reading: %s (%lu MB), Read: %lu files (%lu GB), Measured speed: %zu MB/s\n", ent->d_name, st.st_size/1024/1024, files, total_size / 1024 / 1024 / 1024, (size_t)(mcoef * total_size / us)); } closedir(dir); } |