SYSPERF - update pipe1, pipe2
[dragonfly.git] / test / sysperf / pipe1.c
CommitLineData
6b055cd4
MD
1/*
2 * pipe1.c
3 *
4 * $DragonFly: src/test/sysperf/pipe1.c,v 1.1 2003/08/12 02:29:44 dillon Exp $
5 */
6
7#include "blib.h"
8
9int
10main(int ac, char **av)
11{
12 long long count = 0;
13 long long max;
92d10ba7 14 char c[1];
6b055cd4 15 int j;
92d10ba7 16 int loops;
6b055cd4
MD
17 int fds[2];
18
19 printf("tests full duplex pipe 1write,2read,2write,1read loop\n");
20 if (pipe(fds)) {
21 perror("pipe");
22 exit(1);
23 }
24 if (fork() == 0) {
25 /*
26 * child process
27 */
28 close(fds[0]);
92d10ba7
MD
29 while (read(fds[1], c, sizeof(c)) == sizeof(c)) {
30 write(fds[1], c, sizeof(c));
6b055cd4
MD
31 }
32 _exit(0);
33 } else {
34 /*
35 * parent process.
36 */
37 close(fds[1]);
92d10ba7
MD
38 write(fds[0], c, sizeof(c)); /* prime the caches */
39 read(fds[0], c, sizeof(c));
40
41 start_timing();
42 for (j = 0; ; ++j) {
43 write(fds[0], c, sizeof(c));
44 if (read(fds[0], c, sizeof(c)) != sizeof(c)) {
45 fprintf(stderr, "broken pipe during test\n");
46 exit(1);
47 }
48 if ((j & 31) == 0 && stop_timing(0, NULL))
49 break;
50 }
51 loops = j;
52
6b055cd4 53 start_timing();
92d10ba7
MD
54 for (j = 0; j < loops; ++j) {
55 write(fds[0], c, sizeof(c));
56 if (read(fds[0], c, sizeof(c)) != sizeof(c)) {
6b055cd4
MD
57 fprintf(stderr, "broken pipe during test\n");
58 exit(1);
59 }
60 }
61 stop_timing(j, "full duplex pipe / 1char:");
62 close(fds[0]);
63 while(wait(NULL) >= 0);
64 }
65 return(0);
66}
67