-->

UNIX: разработка сетевых приложений

На нашем литературном портале можно бесплатно читать книгу UNIX: разработка сетевых приложений, Стивенс Уильям Ричард-- . Жанр: ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
UNIX: разработка сетевых приложений
Название: UNIX: разработка сетевых приложений
Дата добавления: 16 январь 2020
Количество просмотров: 377
Читать онлайн

UNIX: разработка сетевых приложений читать книгу онлайн

UNIX: разработка сетевых приложений - читать бесплатно онлайн , автор Стивенс Уильям Ричард

Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 27 28 29 30 31 32 33 34 35 ... 399 ВПЕРЕД
Перейти на страницу:

#include <strings.h>

void bzero(void *<i>dest</i>, size_t <i>nbytes</i>);

void bcopy(const void *<i>src</i>, void *<i>dest</i>, size_t <i>nbytes</i>);

int bcmp(const void *<i>ptr1</i>, const void *<i>ptr2</i>, size_t <i>nbytes</i>);

<i>Возвращает: 0 в случае равенства, ненулевое значение в случае неравенства</i>

ПРИМЕЧАНИЕ

Мы впервые встречаемся со спецификатором const. В приведенном примере он служит признаком того, что значения, на которые указывает указатель, то есть src, ptr1 и ptr2, не изменяются функцией. Другими словами, область памяти, на которую указывает указатель со спецификатором const, считывается функцией, но не изменяется.

Функция

bzero
обнуляет заданное число байтов в указанной области памяти. Мы часто используем эту функцию для инициализации структуры адреса сокета нулевым значением. Функция
bcopy
копирует заданное число байтов из источника в место назначения. Функция
bcmp
сравнивает две произвольных последовательности байтов и возвращает нулевое значение, если две байтовых строки идентичны, и ненулевое — в противном случае.

Следующие функции являются функциями ANSI С:

#include &lt;string.h&gt;

void *memset(void *<i>dest</i>, int <i>c</i>, size_t <i>len</i>);

void *memcpy(void *<i>dest</i>, const void *<i>src</i>, size_t <i>nbytes</i>);

int memcmp(const void *<i>ptr1</i>, const void *<i>ptr2</i>, size_t <i>nbytes</i>);

<i>Возвращает: 0 в случае равенства, значение &lt;0 или &gt;0 в случае неравенства (см. текст)</i>

Функция

memset
присваивает заданному числу байтов значение с. Функция
memcpy
аналогична функции
bcopy
, но имеет другой порядок двух аргументов. Функция
bcopy
корректно обрабатывает перекрывающиеся поля, в то время как поведение функции
memcpy
не определено, если источник и место назначения перекрываются. В случае перекрывания полей должна использоваться функция ANSI С
memmove
(упражнение 30.3).

ПРИМЕЧАНИЕ

Чтобы запомнить порядок аргументов функции memcpy, подумайте о том, что он совпадает с порядком аргументов в операторе присваивания (справа — оригинал, слева — копия).

dest = src;

Последним аргументом этой функции (как и всех ANSI-функций memXXX) всегда является длина области памяти.

Функция

memcmp
сравнивает две произвольных последовательности байтов и возвращает нуль, если они идентичны. В противном случае знак возвращаемого значения определяется знаком разности между первыми несовпадающими байтами, на которые указывают ptr1 и ptr2. Предполагается, что сравниваемые байты принадлежат к типу
unsigned char
.

3.6. Функции inet_aton, inet_addr и inet_ntoa

Существует две группы функций преобразования адресов, которые мы рассматриваем в этом и следующем разделах. Они выполняют преобразование адресов Интернета из строк ASCII (удобных для человеческого восприятия) в двоичные значения с сетевым порядком байтов (эти значения хранятся в структурах адресов сокетов).

1. Функции

inet_aton
,
inet_ntoa
и
inet_addr
преобразуют адрес IPv4 из точечно-десятичной записи (например, 206.168.112.96) в 32-разрядное двоичное значение в сетевом порядке байтов. Возможно, вы встретите эти функции в многочисленных существующих программах.

2. Более новые функции

inet_pton
и
inet_ntop
работают и с адресами IPv4, и с адресами IPv6. Эти функции, описываемые в следующем разделе, мы используем в книге.

#include &lt;arpa/inet.h&gt;

int inet_aton(const char *<i>strptr</i>, struct in_addr *<i>addrptr</i>);

<i>Возвращает: 1, если строка преобразована успешно, 0 в случае ошибки</i>

in_addr_t inet_addr(const char *<i>strptr</i>);

<i>Возвращает: 32-разрядный адрес IPv4 в сетевом порядке байтов: INADDR_NONE в случае ошибки</i>

char *inet_ntoa(struct in_addr <i>inaddr</i>);

<i>Возвращает: указатель на строку с адресом в точечно-десятичной записи</i>

Первая из названных функций,

inet_aton
, преобразует строку, на которую указывает
strptr
, в 32-разрядное двоичное число, записанное в сетевом порядке байтов, передаваемое через указатель
addrptr
. При успешном выполнении возвращаемое значение равно 1, иначе возвращается нуль.

ПРИМЕЧАНИЕ

Функция inet_aton обладает одним недокументированным свойством: если addrptr — пустой указатель (null pointer), функция все равно выполняет проверку допустимости адреса, содержащегося во входной строке, но не сохраняет результата.

Функция

inet_addr
выполняет то же преобразование, возвращая в качестве значения 32-разрядное двоичное число в сетевом порядке байтов. Проблема при использовании этой функции состоит в том, что все 232 возможных двоичных значений являются действительными IP-адресами (от 0.0.0.0 до 255.255.255.255), но в случае возникновения ошибки функция возвращает константу
INADDR_NONE
(обычно представленную двоичным числом, состоящим из 32 бит, установленных в единицу). Это означает, что точечно-десятичная запись 255.255.255.255 (ограниченный адрес для широковещательной передачи IPv4, см. раздел 18.2) не может быть обработана этой функцией, поскольку ее двоичное значение выглядит как указание на сбой при выполнении функции.

ПРИМЕЧАНИЕ

Характерной проблемой, сопровождающей выполнение функции inet_addr, может стать то, что, как утверждается в некоторых руководствах, в случае ошибки она возвращает значение -1 вместо INADDR_NONE. С некоторыми компиляторами это может вызвать проблемы при сравнении возвращаемого значения функции (значение без знака) с отрицательной константой.

1 ... 27 28 29 30 31 32 33 34 35 ... 399 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название