Листинг 6.15. Функция client
//svmsgmpx1q/client.с
1 #include "mesg.h"
2 void
3 client(int readfd, int writefd)
4 {
5 size_t len;
6 ssize_t n;
7 char *ptr;
8 struct mymesg mesg;
9 /* инициализируем буфер идентификатором процесса и пробелом */
10 snprintf(mesg.mesg_data, MAXMESGDATA. "%ld ", (long) getpid());
11 len = strlen(mesg.mesg_data);
12 ptr = mesg.mesg_data + len;
13 /* считываем полное имя файла */
14 Fgets(ptr, MAXMESGDATA – len, stdin);
15 len = strlen(mesg.mesg_data);
16 if (mesg.mesg_data[len-1] == '\n')
17 len--; /* удаляем перевод строки fgets() */
18 mesg.mesg_len = len;
19 mesg.mesg_type = 1;
20 /* записываем PID и имя файла в канал IPC */
21 Mesg_send(writefd, &mesg);
22 /* считываем из канала IPC, записываем в stdout */
23 mesg.mesg_type = getpid();
24 while ((n = Mesg_recv(readfd, &mesg)) > 0)
25 Write(STDOUT_FILENO, mesg.mesg_data, n);
26 }