diff options
| author | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-07-20 20:00:05 +0100 |
|---|---|---|
| committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-07-20 20:00:05 +0100 |
| commit | 3ef782d3745ea8f25a3151561a3cfb882190210e (patch) | |
| tree | 86b9c2f5fde051dd0bced99b3fc9f5a3ba08db69 /docs/programmer_reference/writetest.cs | |
| download | berkeleydb-3ef782d3745ea8f25a3151561a3cfb882190210e.tar.gz | |
Tarball conversion
Diffstat (limited to 'docs/programmer_reference/writetest.cs')
| -rw-r--r-- | docs/programmer_reference/writetest.cs | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/docs/programmer_reference/writetest.cs b/docs/programmer_reference/writetest.cs new file mode 100644 index 00000000..471a893a --- /dev/null +++ b/docs/programmer_reference/writetest.cs @@ -0,0 +1,117 @@ +/* + * writetest -- + * + */ +#include <sys/types.h> +#include <sys/time.h> + +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +void usage(void); + +int +main(argc, argv) + int argc; + char *argv[]; +{ + struct timeval start_time, end_time; + double usecs; + long val; + int bytes, ch, cnt, fd, ops; + char *fname, buf[100 * 1024]; + + bytes = 256; + fname = "testfile"; + ops = 1000; + while ((ch = getopt(argc, argv, "b:f:o:")) != EOF) + switch (ch) { + case 'b': + if ((bytes = atoi(optarg)) > sizeof(buf)) { + fprintf(stderr, + "max -b option %d\n", sizeof(buf)); + exit (1); + } + break; + case 'f': + fname = optarg; + break; + case 'o': + if ((ops = atoi(optarg)) <= 0) { + fprintf(stderr, "illegal -o option value\n"); + exit (1); + } + break; + case '?': + default: + usage(); + } + argc -= optind; + argv += optind; + + (void)unlink(fname); + if ((fd = open(fname, O_RDWR | O_CREAT, 0666)) == -1) { + perror(fname); + exit (1); + } + + memset(buf, 0, bytes); + + printf("Running: %d ops\n", ops); + + (void)gettimeofday(&start_time, NULL); + for (cnt = 0; cnt < ops; ++cnt) { + if (write(fd, buf, bytes) != bytes) { + fprintf(stderr, "write: %s\n", strerror(errno)); + exit (1); + } + if (lseek(fd, (off_t)0, SEEK_SET) == -1) { + fprintf(stderr, "lseek: %s\n", strerror(errno)); + exit (1); + } + if (fsync(fd) != 0) { + fprintf(stderr, "fsync: %s\n", strerror(errno)); + exit (1); + } + } + (void)gettimeofday(&end_time, NULL); + + /* + * Guarantee end_time fields are greater than or equal to start_time + * fields. + */ + if (end_time.tv_sec > start_time.tv_sec) { + --end_time.tv_sec; + end_time.tv_usec += 1000000; + } + + /* Display elapsed time. */ + val = end_time.tv_sec - start_time.tv_sec; + printf("Elapsed time: %ld:", val / (60 * 60)); + val %= 60 * 60; + printf("%ld:", val / 60); + val %= 60; + printf("%ld.%ld\n", val, end_time.tv_usec - start_time.tv_usec); + + /* Display operations per second. */ + usecs = + (end_time.tv_sec - start_time.tv_sec) * 1000000 + + (end_time.tv_usec - start_time.tv_usec); + printf("%d operations: %7.2f operations per second\n", + ops, (ops / usecs) * 1000000); + + (void)unlink(fname); + exit (0); +} + +void +usage() +{ + (void)fprintf(stderr, + "usage: testfile [-b bytes] [-f file] [-o ops]\n"); + exit(1); +} |
