Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 50 стр.

UptoLike

Составители: 

50
struct servent * getservbyport (int PORT, const char *PROTO)
Возвращает информацию о сервисе, использующем порт PORT и протокол
PROTO.
void setservent (int STAYOPEN)
Функция открывает базу данных сервисов. Если аргумент STAYOPEN не равен
нулю, вызовы функций getservbyname и getservbyport не будут закрывать базу данных
(что обычно происходит).
struct servent * getservent (void)
Возвращает следующую запись из базы данных. Если предыдущая запись была
последней, возвращается нулевой указатель.
void endservent (void)
Закрывает базу данных сервисов.
Последовательность байтов
Различные компьютеры используют разные соглашения по расположению
байтов в машинном слове. В некоторых компьютерах более значащий байт расположен
на первом месте, в другихнаоборот. Для того, чтобы такие компьютеры могли
взаимодействовать в сети, протоколы интернет определяют соглашение по
последовательности байтов для данных, передаваемых в сети, которое называется
сетевым порядком байтов”. При использовании гнезд для взаимодействия приложений
нужно учитывать, что поля sin_port и sin_addr структуры sockaddr_in представлены в
сетевом порядке. Если в пакете данных задаются какие-либо данные целочисленного
типа, их также необходимо преобразовать в сетевой порядок.
Если вы используете getservbyname, getservbyport и inet_addr для получения
адреса и номера порта, возвращаемые данные уже содержатся в сетевом порядке.
Следующие функции используются для конвертации слов из машинного
порядка в сетевой.
uint16_t htons (uint16_t HOSTSHORT)
Конвертирует HOSTSHORT из машинного порядка в сетевой.
uint16_t ntohs (uint16_t NETSHORT)
Конвертирует NETSHORT из сетевого порядка в машинный.
uint32_t htonl (uint32_t HOSTLONG)
Конвертирует HOSTLONG из машинного порядка в сетевой. Используется для
адресов IPv4.
uint32_t ntohl (uint32_t NETLONG)
Конвертирует NETLONG из сетевого порядка в машинный. Используется для
адресов IPv4.
База данных протоколов
Используемый по умолчанию коммуникационный протокол в пространстве
имен интернет зависит от стиля взаимодействия. Для потокового взаимодействия
используется протокол TCP, для взаимодействия с помощью датаграмм - UDP, для
надежной передачи данных с помощью датаграмм - RDP.
База данных протоколов обычно расположена в файле ‘/etc/protocols’. Для
доступа к базе данных протоколов используются следующие структуры и функции,
определенные в заголовочном файле <netdb.h>.
struct protoent {
char *p_name;
char **p_aliases;
int p_proto;
};
p_name имя протокола;
         struct servent * getservbyport (int PORT, const char *PROTO)
         Возвращает информацию о сервисе, использующем порт PORT и протокол
PROTO.
         void setservent (int STAYOPEN)
        Функция открывает базу данных сервисов. Если аргумент STAYOPEN не равен
нулю, вызовы функций getservbyname и getservbyport не будут закрывать базу данных
(что обычно происходит).
         struct servent * getservent (void)
       Возвращает следующую запись из базы данных. Если предыдущая запись была
последней, возвращается нулевой указатель.
         void endservent (void)
         Закрывает базу данных сервисов.

        Последовательность байтов
        Различные компьютеры используют разные соглашения по расположению
байтов в машинном слове. В некоторых компьютерах более значащий байт расположен
на первом месте, в других – наоборот. Для того, чтобы такие компьютеры могли
взаимодействовать в сети, протоколы интернет определяют соглашение по
последовательности байтов для данных, передаваемых в сети, которое называется
“сетевым порядком байтов”. При использовании гнезд для взаимодействия приложений
нужно учитывать, что поля sin_port и sin_addr структуры sockaddr_in представлены в
сетевом порядке. Если в пакете данных задаются какие-либо данные целочисленного
типа, их также необходимо преобразовать в сетевой порядок.
        Если вы используете getservbyname, getservbyport и inet_addr для получения
адреса и номера порта, возвращаемые данные уже содержатся в сетевом порядке.
        Следующие функции используются для конвертации слов из машинного
порядка в сетевой.
         uint16_t htons (uint16_t HOSTSHORT)
         Конвертирует HOSTSHORT из машинного порядка в сетевой.
         uint16_t ntohs (uint16_t NETSHORT)
         Конвертирует NETSHORT из сетевого порядка в машинный.
         uint32_t htonl (uint32_t HOSTLONG)
        Конвертирует HOSTLONG из машинного порядка в сетевой. Используется для
адресов IPv4.
         uint32_t ntohl (uint32_t NETLONG)
        Конвертирует NETLONG из сетевого порядка в машинный. Используется для
адресов IPv4.

       База данных протоколов
       Используемый по умолчанию коммуникационный протокол в пространстве
имен интернет зависит от стиля взаимодействия. Для потокового взаимодействия
используется протокол TCP, для взаимодействия с помощью датаграмм - UDP, для
надежной передачи данных с помощью датаграмм - RDP.
       База данных протоколов обычно расположена в файле ‘/etc/protocols’. Для
доступа к базе данных протоколов используются следующие структуры и функции,
определенные в заголовочном файле .
         struct protoent {
              char *p_name;
              char **p_aliases;
              int p_proto;
         };
p_name           имя протокола;


         50