» » » Майкл Джонсон - Разработка приложений в среде Linux. Второе издание


Авторские права

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Здесь можно скачать бесплатно "Майкл Джонсон - Разработка приложений в среде Linux. Второе издание" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство Вильямс, год 2007. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание
Рейтинг:
Название:
Разработка приложений в среде Linux. Второе издание
Издательство:
Вильямс
Год:
2007
ISBN:
978-5-8459-1143-8
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Разработка приложений в среде Linux. Второе издание"

Описание и краткое содержание "Разработка приложений в среде Linux. Второе издание" читать бесплатно онлайн.



Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.

Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.






1080:0:0:0:8:800:200С:417А

FF01:0:0:0:0:0:0:43

0:0:0:0:0:0:0:1

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

1080::8:800:200C:417A

FF01::43

::1

Если рассмотреть самый крайний случай, то адрес 0:0:0:0:0:0:0:0 превращается просто в выражение ::[133].

Последний метод записи IPv6-адресов заключается в том, что последние 32 бита представляются с разделительными точками, а первые 96 битов — с разделительными двоеточиями. При этом адрес обратной связи IPv6 ::1 будет записан либо как ::0.0.0.1, либо как 0:0:0:0:0:0:0.0.0.1.

IPv6 определяет любой адрес с 96 начальными нулями (за исключением адреса обратной связи и неустановленного адреса) как совместимый IPv4-адрес, который позволяет сетевым маршрутизаторам передавать через сети IPv6 пакеты, предназначенные для IPv4-хостов. Сокращение двоеточий позволяет легко записать IPv4-адрес как IPv6-адрес путем добавления :: перед стандартным десятичным адресом с точками. Такой тип адресов называется IPv4-совместимым IPv6-адресом. Такая адресация применяется только маршрутизаторами; обычные программы не могут воспользоваться ее преимуществами.

Программы, работающие на машинах IPv6 и требующие обращения к машинам IPv4, могут использовать отображенные IPv4-адреса. Они дополняют IPv4-адрес 80-ю нулевыми старшими разрядами и 16-битным значением 0xffff, которое записывается как ::ffff:, а за ним следует десятичный IPv4-адрес с точками. Подобная адресация позволяет большинству программ в системе, поддерживающей только версию IPv6, явно общаться с узлами IPv4.

IPv6-адреса хранятся в переменных типа struct sockaddr_in6.

#include <sys/socket.h>

#include <netinet/in.h>


struct sockaddr_in6 {

 short int sin6_family;        /* AF_INET6 */

 unsigned short int sin6_port; /* номер порта */

 unsigned int sin6_flowinfo;   /* информация о потоке обмена IPv6 */

 struct in6_addr sin6_addr;    /* IP-адрес */

 unsigned int sin6_scope_id;   /* набор граничных интерфейсов */

}

Данная структура подобна struct sockaddr_in; здесь первый член сохраняет семейство адресов (в этом примере AF_INET6), а следующий — 16-битный номер порта в сетевом порядке байтов.

Четвертый член содержит двоичное представление IPv6-адреса, выполняя те же самые функции, что и последний член структуры struct sockaddr_in. Оставшиеся два элемента sin6_flowinfo и sin6_scope_id используются в более сложных задачах и для большинства приложений должны быть равны нулю.

Стандарты ограничивают struct sockaddr_in в точности тремя членами, тогда как struct sockaddr_in6 позволительно иметь дополнительные элементы. По этой причине программы, которые вручную заполняют struct sockaddr_in6, должны обнулить все данные структуры с помощью функции memset().

17.5.4. Манипулирование IP-адресами

В приложениях нередко требуется преобразовывать IP-адреса из удобочитаемых для человека представлений (либо десятичное с разделителями-точками, либо с разделителями-двоеточиями) в двоичное представление struct in_addr и наоборот. Функция inet_ntop() принимает двоичный IP-адрес и возвращает указатель на строку, содержащую десятичную форму с точками или двоеточиями.

#include <arpa/inet.h>


const char * inet_ntop(int family, const void * address, char * dest,

 int size);

Здесь family — это адресное семейство того адреса, который передается во втором параметре; поддерживаются только AF_INET и AF_INET6. Следующий параметр указывает на struct in_addr или struct in6_addr6 в зависимости от первого параметра. Значение dest представляет массив символов, состоящий из size элементов, в котором хранится адрес, удобочитаемый для человека. Если форматирование адреса прошло успешно, то функция inet_ntop() возвращает dest, в противном случае возвращается NULL. Существуют только две причины, по которым inet_ntop() может не выполнить свою работу: если буфер назначения недостаточно велик для хранения форматированного адреса (переменной errno присваивается значение ENOSPC) или если параметр family задан неверно (errno содержит EAFNOSUPPORT).

INET_ADDRSTRLEN является константой, определяющей наибольший размер dest, необходимый для хранения любого IPv4-адреса. Соответственно, INET6_ADDRSTRLEN определяет максимальный размер массива для IPv6-адреса.

Программа-пример netlookup.с демонстрирует использование inet_ntop(); полная программа представлена далее в этой главе.

120: if (addr->ai_family == PF_INET) {

121:  struct sockaddr_in * inetaddr = (void*)addr->ai_addr;

122:  char nameBuf[INET_ADDRSTRLEN];

123:

124:  if (serviceName)

125:   printf("\tport %d", ntohs(inetaddr->sin_port));

126:

127:  if (hostName)

128:   printf("\thost %s",

129:    inet_ntop(AF_INET, &inetaddr->sin_addr,

130:    nameBuf, sizeof(nameBuf)));

131: } else if (addr->ai_family == PF_INET6) {

132:  struct sockaddr_in6 *inetaddr =

133:   (void *) addr->ai_addr;

134:  char nameBuf[INET6_ADDRSTRLEN];

135:

136:  if (serviceName)

137:   printf("\tport %d", ntohs(inetaddr->sin6_port));

138:

139:  if (hostName)

140:   printf("\thost %s",

141:    inet_ntop(AF_INET6, &inetaddr->sin6_addr,

142:     nameBuf, sizeof(nameBuf)));

143: }

Обратное преобразование строки, содержащей адрес с точками или двоеточиями, в двоичный IP-адрес выполняет функция inet_pton().

#include <arpa/inet.h>


int inet_pton(int family, const char * address, void * dest);

Параметр family определяет тип преобразуемого адреса (либо AF_INET, либо AF_INET6), a address указывает на строку, в которой содержится символьное представление адреса. Если используется AF_INET, то десятичная строка с точками преобразуется в двоичный адрес, хранящийся в переменной, на которую указывает параметр dest структуры struct in_addr. Для AF_INET6 строка с двоеточиями преобразуется и сохраняется в переменной, на которую указывает dest структуры struct in6_addr. В отличие от большинства библиотечных функций, inet_pton() возвращает 1, если преобразование прошло успешно, 0, если dest не содержит соответствующий адрес, и -1, если параметр family не совпадает с AF_INET или AF_INET6.

Программа-пример reverselookup, код которой представлен далее в главе, использует функцию inet_pton() для преобразования IPv4- и IPv6-адресов, передаваемых пользователем, в структуры struct sockaddr. Ниже приводится раздел кода, выполняющий преобразования IP-адреса, на который указывает hostAddress. В конце данного кода struct sockaddr * addr указывает на структуру, содержащую преобразованный адрес.

 79: if (!hostAddress) {

 80:  addr4.sin_family = AF_INET;

 81:  addr4.sin_port = portNum;

 82: } else if (! strchr(hostAddress, ':')) {

 83:  /* Если в hostAddress появляется двоеточие, то принимаем версию IPv6.

 84:     В противном случае это IPv4-адрес */

 85:

 86:  if (inet_pton(AF_INET, hostAddress,

 87:      &addr4.sin_addr) <= 0) {

 88:   fprintf(stderr, "ошибка преобразования IPv4-адреса %s\n",

 89:    hostAddress);

 90:   return 1;

 91:  }

 92:

 93:  addr4.sin_family = AF_INET;

 94:  addr4.sin_port = portNum;

 95: } else {

 96:

 97:  memset(&addr6, 0, sizeof(addr6));

 98:

 99:  if (inet_pton(AF_INET6, hostAddress,

100:      &addr6.sin6_addr) <= 0) {

101:   fprintf(stderr, "ошибка преобразования IPv6-адреса %s\n",

102:   hostAddress);

103:   return 1;

104:  }

105:

106:  addr6.sin6_family = AF_INET6;

107:  addr6.sin6_port = portNum;

108:  addr = (struct sockaddr *) &addr6;

109:  addrLen = sizeof(addr6);

110: }

17.5.5. Преобразование имен в адреса

Длинные последовательности чисел являются отлично подходящим методом идентификации для компьютеров, позволяющим им однозначно узнавать друг друга. Однако большинство людей охватывает ужас при мысли о том, что придется иметь дело с большим количеством цифр. Для того чтобы разрешить людям применять текстовые названия для компьютеров вместо числовых, в состав протоколов TCP/IP входит распределенная база данных для взаимных преобразований имен хостов и IP-адресов. Эта база данных называется DNS (Domain Name System — служба имен доменов), она подробно рассматривается в [34] и [1].


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Разработка приложений в среде Linux. Второе издание"

Книги похожие на "Разработка приложений в среде Linux. Второе издание" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Майкл Джонсон

Майкл Джонсон - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Майкл Джонсон - Разработка приложений в среде Linux. Второе издание"

Отзывы читателей о книге "Разработка приложений в среде Linux. Второе издание", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.