Основы операционных систем. Практикум




Применение интерфейса сетевых - часть 2


При этом в качестве имени сокета требуется задавать имя несуществующего еще файла в директории, к которой у вас есть права доступа как на запись, так и на чтение. При настройке адреса (системный вызов bind()) под этим именем будет создан файл типа "сокет" – последний еще неизвестный нам тип файла. Этот файл для сокетов играет роль файла-метки типа FIFO для именованных pip’ов. Если на вашей машине функционируют X-Windows, то вы сможете обнаружить такой файл в директории с именем /tmp/.X11-unix – это файл типа "сокет", служащий для взаимодействия локальных процессов с оконным сервером.

Для хранения полного адреса сокета используется структура следующего вида, описанного в файле <sys/un.h>:

struct sockaddr_un{ short sun_family; /* Избранное семейство протоколов – всегда AF_UNIX */

char sun_path[108]; /* Имя файла типа "сокет" */ };

Выбранное имя файла мы будем копировать внутрь структуры, используя функцию strcpy().

Фактическая длина полного адреса сокета, хранящегося в структуре с именем my_addr, может быть вычислена следующим образом: sizeof(short)+strlen(my_addr.sun_path). В Linux для этих целей можно использовать специальный макрос языка С

SUN_LEN(struct sockaddr_un*)

Ниже приведены тексты переписанных под семейство UNIX Domain протоколов клиента и сервера для сервиса echo (программы 15–16-5.c и 15–16-6.c), общающиеся через датаграммы. Клиент использует сокет с именем AAAA в текущей директории, а сервер – сокет с именем BBBB. Как следует из описания типа данных, эти имена (полные или относительные) не должны по длине превышать 107 символов. Комментарии даны лишь для изменений по сравнению с программами 15–16-1.c и 15–16-2.c.

Листинг 15-16.5. Программа 15–16-5.c . A simple echo UNIX Domain datagram server (html, txt)

Листинг 15-16.6. Программа 15–16-6.c . A simple echo UNIX Domain datagram client. (html, txt)

Наберите программы, откомпилируйте их и убедитесь в работоспособности.




Содержание  Назад  Вперед