// Программа из конспекта "Системное программное обеспечение" // Очереди сообщений в Linux // стр. 108 // Название: client.c // Описание: функция клиента клиент-серверной системы // на основе очередей с мультиплексированием //svmsgmpx1q/client.с #include "mesg_send.c" #include "mesg_recv.c" void client(int readfd, int writefd) { size_t len; ssize_t n; char *ptr; struct mymesg mesg; /*инициализируем буфер идентификатором процесса и пробелом */ snprintf(mesg.mesg_data, MAXMESGDATA, "%ld ", (long)getpid()); len = strlen(mesg.mesg_data); ptr = mesg.mesg_data + len; /* считываем полное имя файла */ fgets(ptr, MAXMESGDATA - len, stdin); len = strlen(mesg.mesg_data); if (mesg.mesg_data[len-1] == '\n') len--; /* удаляем перевод строки fgets() */ mesg.mesg_len = len; mesg.mesg_type = 1; /* записываем PID и имя файла в канал IPC */ printf("Процесс %ld отправляет запрос на файл %s\n",getpid(),ptr); mesg_send(writefd, &mesg); /* считываем из канала IPC, записываем в stdout */ mesg.mesg_type = getpid(); printf("Ждем файл\n"); while ( (n = mesg_recv(readfd, &mesg)) > 0) write(STDOUT_FILENO, mesg.mesg_data, n); }