на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 15.16. Процедура сервера, открывающая файл и возвращающая клиенту дескриптор

//doors/serverfd1.c

1  #include "unpipc.h"


2  void

3  servproc(void *cookie, char *dataptr, size_t datasize,

4   door_desc_t *descptr, size_t ndesc)

5  {

6   int fd;

7   char resbuf[BUFFSIZE];

8   door_desc_t desc;

9   dataptr[datasize-1] = 0; /* завершающий О */

10  if ((fd = open(dataptr, O_RDONLY)) == –1) {

11   /* ошибка, нужно сообщить клиенту */

12   snprintf(resbuf, BUFFSIZE, "%s: can't open, %s",

13   dataptr, strerror(errno));

14   Door_return(resbuf, strlen(resbuf), NULL, 0);

15  } else {

16   /* ОК, возвращаем дескриптор */

17   desc.d_data.d_desc.d_descriptor = fd;

18   desc.d_attributes = DOOR_DESCRIPTOR;

19   Door_return(NULL, 0, &desc, 1);

20  }

21 }


Считывание дескриптора и копирование файла | UNIX: взаимодействие процессов | Открытие файла для клиента