// Неименованные каналы в Linux // Программа из учебника "Системное программирование в среде Linux", Гунько А.В., стр. 73 // Название: server.c // Описание: функция сервера //pipe/server.с #include #include #include #include #include #include #include #include #include #define MAXLINE 80 void server(int readfd, int writefd) { int fd; ssize_t n; char buff[MAXLINE+1]; /* получение полного имени из канала IPC */ if ((n = read(readfd, buff, MAXLINE)) == 0) { printf("end-of-file while reading pathname"); exit(1); } buff[n] = '\0'; /* полное имя завершается 0 */ if ( (fd = open(buff, O_RDONLY)) < 0) { /* 4error must tell client */ snprintf(buff+n, sizeof(buff)-n,": can't open %s\n",strerror(errno)); n = strlen(buff); write(writefd, buff, n); } else { /* файл успешно открыт и копируется в канал */ while ( (n = read(fd, buff, MAXLINE)) > 0) write(writefd, buff, n); close(fd); } }