|
|
1.1 root 1: /* @(#)test5b.c 1.3 90/01/03 NFS Rev 2 Testsuite
2: * 1.3 Lachman ONC Test Suite source
3: *
4: * Test read - will read a file of specified size, contents not looked at
5: *
6: * Uses the following important system calls against the server:
7: *
8: * chdir()
9: * mkdir() (for initial directory creation if not -m)
10: * open()
11: * read()
12: * unlink()
13: */
14:
15: #include <sys/param.h>
16: #ifndef major
17: #include <sys/types.h>
18: #endif
19: #ifdef SVR3
20: #include <sys/fs/nfs/time.h>
21: #else
22: #include <sys/time.h>
23: #endif
24: #include <sys/stat.h>
25: #include <stdio.h>
26: #include "tests.h"
27:
28: #ifndef MIN
29: #define MIN(a, b) ((a) < (b) ? (a) : (b))
30: #endif
31:
32: #define BUFSZ 8192
33: #define DSIZE 1048576
34:
35: int Tflag = 0; /* print timing */
36: int Hflag = 0; /* print help message */
37: int Fflag = 0; /* test function only; set count to 1, negate -t */
38: int Nflag = 0; /* Suppress directory operations */
39:
40: usage()
41: {
42: fprintf(stdout, "usage: %s [-htfn] [size count fname]\n", Myname);
43: fprintf(stdout, " Flags: h Help - print this usage info\n");
44: fprintf(stdout, " t Print execution time statistics\n");
45: fprintf(stdout, " f Test function only (negate -t)\n");
46: fprintf(stdout, " n Suppress test directory create operations\n");
47: }
48:
49: main(argc, argv)
50: int argc;
51: char *argv[];
52: {
53: int count = DCOUNT; /* times to do each file */
54: int ct;
55: int size = DSIZE;
56: int si;
57: int i;
58: int fd;
59: int bytes;
60: char *bigfile = "bigfile";
61: struct timeval time;
62: char str[MAXPATHLEN];
63: struct stat statb;
64: char *opts;
65: char buf[BUFSZ];
66:
67: umask(0);
68: setbuf(stdout, NULL);
69: Myname = *argv++;
70: argc--;
71: while (argc && **argv == '-') {
72: for (opts = &argv[0][1]; *opts; opts++) {
73: switch (*opts) {
74: case 'h': /* help */
75: usage();
76: exit(1);
77:
78: case 't': /* time */
79: Tflag++;
80: break;
81:
82: case 'f': /* funtionality */
83: Fflag++;
84: break;
85:
86: case 'n': /* No Test Directory create */
87: Nflag++;
88: break;
89:
90: default:
91: error("unknown option '%c'", *opts);
92: usage();
93: exit(1);
94: }
95: }
96: argc--;
97: argv++;
98: }
99:
100: if (argc) {
101: size = getparm(*argv, 1, "size");
102: if (size <= 0) {
103: usage();
104: exit(1);
105: }
106: argv++;
107: argc--;
108: }
109: if (argc) {
110: count = getparm(*argv, 1, "count");
111: if (count <= 0) {
112: usage();
113: exit(1);
114: }
115: argv++;
116: argc--;
117: }
118: if (argc) {
119: bigfile = *argv;
120: argv++;
121: argc--;
122: }
123: if (argc) {
124: usage();
125: exit(1);
126: }
127:
128: if (Fflag) {
129: Tflag = 0;
130: count = 1;
131: }
132:
133: fprintf(stdout, "%s: read\n", Myname);
134:
135: mtestdir(NULL);
136:
137: if (Tflag) {
138: starttime();
139: }
140:
141: for (ct = 0; ct < count; ct++) {
142: if ((fd = open(bigfile, 0)) < 0) {
143: error("can't open '%s'", bigfile);
144: exit(1);
145: }
146: for (si = size; si > 0; si -= bytes) {
147: bytes = MIN(BUFSZ, si);
148: if (read(fd, buf, bytes) != bytes) {
149: error("'%s' read failed", bigfile);
150: exit(1);
151: }
152: }
153: close(fd);
154: }
155:
156: if (Tflag) {
157: endtime(&time);
158: }
159: fprintf(stdout, "\tread %d byte file %d times", size, count);
160: if (Tflag) {
161: fprintf(stdout, " in %d.%-2d seconds (%d bytes/sec)",
162: time.tv_sec, time.tv_usec / 10000, size*count/time.tv_sec);
163: }
164: fprintf(stdout, "\n");
165:
166: if (unlink(bigfile) < 0) {
167: error("can't unlink '%s'", bigfile);
168: exit(1);
169: }
170: complete();
171: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.