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

Здесь есть возможность читать онлайн «Майкл Джонсон - Разработка приложений в среде Linux. Второе издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Разработка приложений в среде Linux. Второе издание: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка приложений в среде Linux. Второе издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

Разработка приложений в среде Linux. Второе издание — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка приложений в среде Linux. Второе издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#include

#include

int getnameinfo(struct sockaddr * addr, socklen_t addrlen,

char * hostname, size_t hostlen,

char * servicename, size_tservicelen, intflags);

Здесь параметр addrуказывает либо на struct sockaddr_in, либо на struct sockaddr_in6, член addrlenсодержит размер структуры, на которую указывает addr. IP-адрес и номер порта, определенные addr, преобразуются в имя хоста, сохраняющееся в ячейке, на которую указывает hostname, и в имя службы, сохраняющееся в servicename.

Один из параметров может равняться NULL, при этом функция getnameinfo()не ищет соответствие имени для данного параметра.

Параметры hostlenи servicelenопределяют, сколько байт доступно в буферах, на которые указывают hostnameи servicenameсоответственно. Если ни одно имя не умещается в доступном пространстве, буфера переполняются и возвращается ошибка ( EAI_OVERFLOW).

Последний аргумент flagsизменяет способ, которым функция getnameinfo()производит поиск имен. Параметр должен быть равен нулю или принимать одно или несколько (объединенных логическим "ИЛИ") из описанных ниже значений.

NI_DGRAM Отыскивается имя службы UDP для указанного порта (вместо имени службы TCP). Примечание . Эти два имени почти всегда идентичны, однако существует несколько портов, определенных только для UDP-портов (протокол прерывания SNMP — один из них), и несколько случаев, когда один и тот же номер порта используется для различных TCP и UDP служб (например, порт 512 применяется и для TCP-службы exec, и для UDP-службы biff).
NI_NAMEREQD Если преобразование IP-адреса в имя хоста завершается неудачей и установлен данный флаг, то функция getnameinfo()возвращает ошибку. В противном случае она возвращает IP-адрес в формате с разделительными точками или двоеточиями.
NI_NOFQDN Имена хостов обычно возвращаются как полностью уточненные имена доменов. Это означает, что возвращается полное имя хоста, а не локальное сокращение. Если, к примеру, установлен данный флаг, вашим хостом является digit.iana.org, и вы ищете IP-адрес, соответствующий www.iana.org, тогда будет возвращено имя хоста www. Поиск имен хостов для остальных машин при этом не затрагивается (в предыдущем примере поиск адреса для www.ietf.orgпредоставит полное имя хоста www.ietf.org.
NI_NUMERICHOST Вместо выполнения поиска имен хостов функция getnameinfo()преобразует IP-адрес в IP-адрес по аналогии с inet_ntop().
NI_NUMERICSERV Номер порта размещается в servicenameв виде форматированной числовой строки (а не преобразуется в имя службы).

Возвращаемые коды для getnameinfo()— те же самые, что и для gethostinfо(); в случае успеха возвращается нуль, в случае неудачи — код ошибки. Полный перечень возможных ошибок приведен в табл. 17.3. Для преобразования этих ошибок в описательные строки служит функция gai_strerror().

Ниже приведен пример, показывающий использование getnameinfo()для выполнения обратного поиска имени для адресов IPv4 и IPv6.

$ ./reverselookup --host ::1

hostname: localhost

$ ./reverselookup --host 127.0.0.1

hostname: localhost

$ ./reverselookup --host 3ffe:b00:c18:1::10

hostname: www.6bone.net

$ ./reverselookup --host 206.123.31.124 --service 80

hostname: www.6bone.net service name: http

1: /* reverselookup.с */

2:

3: #include

4: #include

5: #include

6: #include

7: #include

8: #include

9:

10: /* Вызывается, если во время обработки командной строки происходит ошибка;

11: отображает короткое сообщение для пользователя и завершается. */

12: void usage(void) {

13: fprintf(stderr, "использование: reverselookup [--numerichost] "

14: "[--numericserv] [--namereqd] [--udp]\n");

15: fprintf(stderr, " [--nofqdn] "

16: "[--service<���служба>] [--host<���имя_хоста>]\n");

17: exit(1);

18: }

19:

20: int main(int argc, const char ** argv) {

21: int flags;

22: const char * hostAddress = NULL;

23: const char * serviceAddress = NULL;

24: struct sockaddr_in addr4;

25: struct sockaddr_in6 addr6;

26: struct sockaddr *addr = (struct sockaddr *) &addr4;

27: int addrLen = sizeof(addr4);

28: int rc;

29: int portNum = 0;

30: const char ** ptr;

31: char hostName[1024];

32: char serviceName[256];

33:

34: /* очистить флаги */

35: flags = 0;

36:

37: /* разобрать аргументы командной строки, игнорируя argv[0] */

38: ptr = argv + 1;

39: while (*ptr && *ptr[0] == '-') {

40: if (!strcmp(*ptr, "—numerichost")) {

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

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


Геше Джампа Тинлей - Лоджонг (второе издание)
Геше Джампа Тинлей
Алексей Филатов - Люди «А». Второе издание
Алексей Филатов
Отзывы о книге «Разработка приложений в среде Linux. Второе издание»

Обсуждение, отзывы о книге «Разработка приложений в среде Linux. Второе издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x