Листинг А.8. Функции reader и writer
//bench/bw_svmsg.c
34 void
35 writer(int contfd, int msqid)
36 {
37 int ntowrite;
38 for (;;) {
39 Read(contfd, &ntowrite, sizeof(ntowrite));
40 while (ntowrite > 0) {
41 Msgsnd(msqid, buf, xfersize – sizeof(long), 0);
42 ntowrite –= xfersize;
43 }
44 }
45 }
46 void
47 reader(int contfd, int msqid, int nbytes)
48 {
49 ssize_t n;
50 Write(contfd, &nbytes, sizeof(nbytes));
51 while ((nbytes > 0) &&
52 ((n = Msgrcv(msqid, buf, xfersize – sizeof(long), 0, 0)) > 0)) {
53 nbytes –= n + sizeof(long);
54 }
55 }