xref: /dflybsd-src/test/sysperf/read1.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1*86d7f5d3SJohn Marino /*
2*86d7f5d3SJohn Marino  * read1.c
3*86d7f5d3SJohn Marino  *
4*86d7f5d3SJohn Marino  * Tests reading 1 byte at a time from a file.
5*86d7f5d3SJohn Marino  *
6*86d7f5d3SJohn Marino  * $DragonFly: src/test/sysperf/read1.c,v 1.1 2004/08/13 02:28:42 dillon Exp $
7*86d7f5d3SJohn Marino  */
8*86d7f5d3SJohn Marino 
9*86d7f5d3SJohn Marino #include "blib.h"
10*86d7f5d3SJohn Marino #include <errno.h>
11*86d7f5d3SJohn Marino #include <sys/resource.h>
12*86d7f5d3SJohn Marino #include <sys/fcntl.h>
13*86d7f5d3SJohn Marino 
14*86d7f5d3SJohn Marino char Buf[8192];
15*86d7f5d3SJohn Marino 
16*86d7f5d3SJohn Marino int
main(int ac,char ** av)17*86d7f5d3SJohn Marino main(int ac, char **av)
18*86d7f5d3SJohn Marino {
19*86d7f5d3SJohn Marino     int bytes;
20*86d7f5d3SJohn Marino     int fd;
21*86d7f5d3SJohn Marino     int i;
22*86d7f5d3SJohn Marino     int j;
23*86d7f5d3SJohn Marino     char c;
24*86d7f5d3SJohn Marino     char *ptr;
25*86d7f5d3SJohn Marino     const char *filename;
26*86d7f5d3SJohn Marino 
27*86d7f5d3SJohn Marino     if (ac == 1) {
28*86d7f5d3SJohn Marino 	fprintf(stderr, "%s filesize[k,m]\n", av[0]);
29*86d7f5d3SJohn Marino 	exit(1);
30*86d7f5d3SJohn Marino     }
31*86d7f5d3SJohn Marino     bytes = strtol(av[1], &ptr, 0);
32*86d7f5d3SJohn Marino     if (*ptr == 'k' || *ptr == 'K') {
33*86d7f5d3SJohn Marino 	bytes *= 1024;
34*86d7f5d3SJohn Marino     } else if (*ptr == 'm' || *ptr == 'M') {
35*86d7f5d3SJohn Marino 	bytes *= 1024 * 1024;
36*86d7f5d3SJohn Marino     } else if (*ptr) {
37*86d7f5d3SJohn Marino 	fprintf(stderr, "Illegal numerical suffix: %s\n", ptr);
38*86d7f5d3SJohn Marino 	exit(1);
39*86d7f5d3SJohn Marino     }
40*86d7f5d3SJohn Marino     if (bytes <= 0) {
41*86d7f5d3SJohn Marino 	fprintf(stderr, "I can't handle %d sized buffers\n", bytes);
42*86d7f5d3SJohn Marino 	exit(1);
43*86d7f5d3SJohn Marino     }
44*86d7f5d3SJohn Marino 
45*86d7f5d3SJohn Marino     filename = "read1.dat";
46*86d7f5d3SJohn Marino     fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0666);
47*86d7f5d3SJohn Marino     if (fd < 0) {
48*86d7f5d3SJohn Marino 	if (errno == EROFS) {
49*86d7f5d3SJohn Marino 	    filename = "/tmp/read1.dat";
50*86d7f5d3SJohn Marino 	    fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0666);
51*86d7f5d3SJohn Marino 	}
52*86d7f5d3SJohn Marino 	if (fd < 0) {
53*86d7f5d3SJohn Marino 	    perror("open()");
54*86d7f5d3SJohn Marino 	    exit(1);
55*86d7f5d3SJohn Marino 	}
56*86d7f5d3SJohn Marino     }
57*86d7f5d3SJohn Marino     for (i = 0; i < bytes; i += sizeof(Buf)) {
58*86d7f5d3SJohn Marino 	int n = (bytes - i > sizeof(Buf)) ? sizeof(Buf) : bytes - i;
59*86d7f5d3SJohn Marino 	if (write(fd, Buf, n) != n) {
60*86d7f5d3SJohn Marino 	    close(fd);
61*86d7f5d3SJohn Marino 	    perror("write()");
62*86d7f5d3SJohn Marino 	    remove(filename);
63*86d7f5d3SJohn Marino 	    exit(1);
64*86d7f5d3SJohn Marino 	}
65*86d7f5d3SJohn Marino     }
66*86d7f5d3SJohn Marino     fsync(fd);
67*86d7f5d3SJohn Marino     fsync(fd);
68*86d7f5d3SJohn Marino     sleep(1);
69*86d7f5d3SJohn Marino     fsync(fd);
70*86d7f5d3SJohn Marino     lseek(fd, 0L, 0);
71*86d7f5d3SJohn Marino     sleep(1);
72*86d7f5d3SJohn Marino 
73*86d7f5d3SJohn Marino     start_timing();
74*86d7f5d3SJohn Marino     i = 0;
75*86d7f5d3SJohn Marino     while (stop_timing(0, NULL) == 0) {
76*86d7f5d3SJohn Marino 	for (j = 0; j < 256 * 1024; ++j) {
77*86d7f5d3SJohn Marino 	    if (read(fd, &c, 1) != 1)
78*86d7f5d3SJohn Marino 		lseek(fd, 0L, 0);
79*86d7f5d3SJohn Marino 	}
80*86d7f5d3SJohn Marino 	i += j;
81*86d7f5d3SJohn Marino     }
82*86d7f5d3SJohn Marino     lseek(fd, 0L, 0);
83*86d7f5d3SJohn Marino     start_timing();
84*86d7f5d3SJohn Marino     for (j = 0; j < i; ++j) {
85*86d7f5d3SJohn Marino 	if (read(fd, &c, 1) != 1)
86*86d7f5d3SJohn Marino 	    lseek(fd, 0L, 0);
87*86d7f5d3SJohn Marino     }
88*86d7f5d3SJohn Marino     stop_timing(j, "read 1char from file:");
89*86d7f5d3SJohn Marino     remove(filename);
90*86d7f5d3SJohn Marino     return(0);
91*86d7f5d3SJohn Marino }
92*86d7f5d3SJohn Marino 
93