// Программа из конспекта "Системное программное обеспечение" // Очереди сообщений в Linux // стр. 107 // Название: server.c // Описание: функция сервера клиент-серверной системы //pipemesg/server.с #include "mesg.h" void server (int readfd, int wrltefd) { FILE *fp; ssize_t n; struct mymesg mesg; /* считывание полного имени из канала */ mesg.mesg_type = 1; if ( (n =mesg_recv(readfd, &mesg)) == 0) err_quit("pathname missing"); mesg.mesg_data[n] = '\0'; /* полное имя. завершающееся 0 */ if ( (fp =fopen(mesg.mesg_data. "r")) == NULL) { /* ошибка, нужно сообщить клиенту */ snpnntf(mesg.mesg_data + n, sizeof(mesg.mesg_data) - n, ": can't open. %s\n". strerror(errno)); mesg.mesg_len = strlen(mesg.mesg_data); mesg_send(writefd, &mesg); } else { /* файл успешно открыт, передача данных */ while (fgets(mesg.mesg_data, MAXMESGDATA, fp) != NULL) { mesg.mesg_len = strlen(mesg.mesg_data): mesg_send(writefd, &mesg); } fclose(fp); } /* отправка сообщения нулевой длины для обозначения конца связи */ mesg.mesg_len = 0; mesg_send(writefd, &mesg); }