summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/writetest.cs
diff options
context:
space:
mode:
authorLorry <lorry@roadtrain.codethink.co.uk>2012-07-20 20:00:05 +0100
committerLorry <lorry@roadtrain.codethink.co.uk>2012-07-20 20:00:05 +0100
commit3ef782d3745ea8f25a3151561a3cfb882190210e (patch)
tree86b9c2f5fde051dd0bced99b3fc9f5a3ba08db69 /docs/programmer_reference/writetest.cs
downloadberkeleydb-3ef782d3745ea8f25a3151561a3cfb882190210e.tar.gz
Tarball conversion
Diffstat (limited to 'docs/programmer_reference/writetest.cs')
-rw-r--r--docs/programmer_reference/writetest.cs117
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);
+}