UNIX: разработка сетевых приложений - Страница 31
#include <strings.h>void bzero(void *dest, size_t nbytes);void bcopy(const void *src, void *dest, size_t nbytes);int bcmp(const void *ptr1, const void *ptr2, size_t nbytes);Возвращает: 0 в случае равенства, ненулевое значение в случае неравенстваМы впервые встречаемся со спецификатором const. В приведенном примере он служит признаком того, что значения, на которые указывает указатель, то есть src, ptr1 и ptr2, не изменяются функцией. Другими словами, область памяти, на которую указывает указатель со спецификатором const, считывается функцией, но не изменяется.
Функция
bzerobcopybcmpСледующие функции являются функциями ANSI С:
#include <string.h>void *memset(void *dest, int c, size_t len);void *memcpy(void *dest, const void *src, size_t nbytes);int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);Возвращает: 0 в случае равенства, значение <0 или >0 в случае неравенства (см. текст)Функция
memsetmemcpybcopybcopymemcpymemmoveЧтобы запомнить порядок аргументов функции memcpy, подумайте о том, что он совпадает с порядком аргументов в операторе присваивания (справа — оригинал, слева — копия).
dest = src;Последним аргументом этой функции (как и всех ANSI-функций memXXX) всегда является длина области памяти.
Функция
memcmpunsigned char3.6. Функции inet_aton, inet_addr и inet_ntoa
Существует две группы функций преобразования адресов, которые мы рассматриваем в этом и следующем разделах. Они выполняют преобразование адресов Интернета из строк ASCII (удобных для человеческого восприятия) в двоичные значения с сетевым порядком байтов (эти значения хранятся в структурах адресов сокетов).
1. Функции
inet_atoninet_ntoainet_addr2. Более новые функции
inet_ptoninet_ntop#include <arpa/inet.h>int inet_aton(const char *strptr, struct in_addr *addrptr);Возвращает: 1, если строка преобразована успешно, 0 в случае ошибкиin_addr_t inet_addr(const char *strptr);Возвращает: 32-разрядный адрес IPv4 в сетевом порядке байтов: INADDR_NONE в случае ошибкиchar *inet_ntoa(struct in_addr inaddr);Возвращает: указатель на строку с адресом в точечно-десятичной записиПервая из названных функций,
inet_atonstrptraddrptrФункция inet_aton обладает одним недокументированным свойством: если addrptr — пустой указатель (null pointer), функция все равно выполняет проверку допустимости адреса, содержащегося во входной строке, но не сохраняет результата.
Функция
inet_addrINADDR_NONEХарактерной проблемой, сопровождающей выполнение функции inet_addr, может стать то, что, как утверждается в некоторых руководствах, в случае ошибки она возвращает значение -1 вместо INADDR_NONE. С некоторыми компиляторами это может вызвать проблемы при сравнении возвращаемого значения функции (значение без знака) с отрицательной константой.