Листинг А.14. Программа измерения задержки канала
//bench/lat_pipe.c
1 #include "unpipc.h"
2 void
3 doit(int readfd, int writefd)
4 {
5 char c;
6 Write(writefd, &c, 1);
7 if (Read(readfd, &c, 1) != 1)
8 err_quit("read error");
9 }
10 int
11 main(int argc, char **argv)
12 {
13 int i, nloop, pipe1[2], pipe2[2];
14 char c;
15 pid_t childpid;
16 if (argc != 2)
17 err_quit("usage: lat_pipe <#loops>");
18 nloop = atoi(argv[1]);
19 Pipe(pipe1);
20 Pipe(pipe2);
21 if ((childpid = Fork()) == 0) {
22 for(;;) { /* дочерний процесс */
23 if (Read(pipe1[0], &c, 1) != 1)
24 err_quit("read error");
25 Write(pipe2[1], &c, 1);
26 }
27 ехit(0);
28 }
29 /* родительский процесс */
30 doit(pipe2[0], pipe1[1]);
31 Start_time();
32 for (i = 0; i < nloop; i++)
33 doit(pipe2[0], pipe1[1]);
34 printf("latency: %.3f usec\n", Stop_time() / nloop);
35 Kill(childpid, SIGTERM);
36 exit(0);
37 }