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

Тут можно читать онлайн Майкл Джонсон - Разработка приложений в среде Linux. Второе издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Вильямс, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка приложений в среде Linux. Второе издание
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-8459-1143-8
  • Рейтинг:
    3.8/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

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

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

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

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

17.8.3. Пример поиска информации хоста с использованием унаследованных функций

Ниже приводится пример программы, использующей inet_aton(), inet_ntoa(), gethostbyname(), gethostbyaddr(). Она принимает единственный аргумент, который может быть либо именем хоста, либо IP-адресом в десятичном представлении с точками. Она отыскивает хост и распечатывает все имена хоста и IP-адреса, ассоциированные с ним.

Любой аргумент, который является действительным десятичным адресом, считается IP-номером, а не именем хоста.

1: /* lookup.с */

2:

3: /* Получает либо имя хоста, либо IP-адрес в командной строке, выводит

4: каноническое имя хоста для данного хоста и все IP-номера и имена

5: хостов, ассоциированные с ним. */

6:

7: #include /* для gethostby* */

8: #include

9: #include /* для адресных структур */

10: #include /* для inet_ntoa() */

11: #include

12:

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

14: struct hostent * answer;

15: struct in_addr address, ** addrptr;

16: char ** next;

17:

18: if (argc != 2) {

19: fprintf(stderr, "поддерживается только одиночный аргумент\n");

20: return 1;

21: }

22:

23: /* Если аргумент выглядит как IP, то принимаем его как таковой

24: и выполняет обратный поиск имени */

25: if (inet_aton(argv[1], &address))

26: answer = gethostbyaddr((char *)&address, sizeof(address),

27: AF_INET);

28: else

29: answer = gethostbyname(argv[1])

30:

31: /* поиск имени хоста не удался */

32: if (!answer) {

33: herror("ошибка поиска хоста");

34: return 1;

35: }

36:

37: printf("Каноническое имя хоста: %s\n", answer->h_name);

38:

39: /* если есть псевдонимы, все они выводятся на печать */

40: if (answer->h_aliases[0]) {

41: printf("Псевдонимы:");

42: for(next = answer->h_aliases; *next; next++)

43: printf(" %s", *next);

44: printf("\n");

45: }

46:

47: /* отобразить все IP-адреса для данной машины */

48: printf("Адреса:");

49: for (addrptr = (structin_addr **) answer->h_addr_list;

50: *addrptr; addrptr++)

51: printf (" %s", inet_ntoa(**addrptr));

52: printf("\n");

53:

54: return 0;

55: }

Ниже показан пример вывода этой программы.

$ ./lookup ftp.netscape.com

Каноническое имя хоста: ftp25.netscape.com

Псевдонимы: ftp.netscape.com anonftp10.netscape.com

Адреса: 207.200.74.21

17.8.4. Поиск номеров портов

Новые функции getaddrinfo()и getnameinfo()предлагают простое выполнение преобразований имен служб в номера портов с одновременным определением имени хоста. В старых реализациях поиск имен служб проводился абсолютно независимо от поиска имен хостов. Доступ к именам служб можно получить через функцию getservbyname().

#include

struct servent * getservbyname(const char * name,

const char * protocol);

Первый параметр nameпредставляет собой имя службы, о которой в приложении требуется информация. Параметр protocolуказывает протокол для использования. База данных служб содержит информацию о других протоколах (особенно UDP); конкретное определение протокола позволяет функции игнорировать информацию по другим протоколам. Параметр protocolобычно является строкой "tcp", хотя могут использоваться и другие имена протоколов, например, "udp".

Функция getservbyname()возвращает указатель на структуру, которая содержит информацию о запрашиваемой службе. Информация может перезаписываться при последующем вызове getservbyname(), поэтому важные данные нужно сохранять в приложении. Функция getservbyname()возвращает следующую информацию:

#include

struct servent {

char * s_name; /* имя службы */

char ** s_aliases; /* псевдонимы службы */

int s_port; /* номер порта */

char * s_proto; /* протокол для использования */

}

Каждая служба может иметь несколько имен, ассоциированных с ней, но только один номер порта. Переменная s_nameрегистрирует каноническое имя службы, s_portсодержит официальный номер порта данной службы (представленный в сетевом порядке байтов), s_protoпредставляет протокол для использования (например, "tcp"). Член s_aliasesявляется массивом указателей псевдонимов службы (указатель NULLобозначает конец списка).

Если функция не выполняет свою работу, то она возвращает NULLи устанавливает h_errno. Ниже приведен пример программы, которая извлекает TCP-службу, указанную в командной строке, и выводит на экран каноническое имя, номер порта и все псевдонимы данной службы.

1: /* services.с */

2:

3: #include

4: #include

5: #include

6:

7: /* Отображает номер порта TCP и все псевдонимы службы,

8: указанной в командной строке */

9:

10: /* services.с отыскивает номер порта для службы */

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

12: struct servent * service;

13: char ** ptr;

14:

15: if (argc != 2) {

16: fprintf(stderr, "поддерживается только одиночный аргумент\n");

17: return 1;

18: }

19:

20: /* поиск службы в /etc/services, в случае неудачи

21: передается ошибка */

22: service = getservbyname(argv[1] , "tcp");

23: if (!service) {

24: herror("getservbyname failed");

25: return 1;

26: }

27:

28: printf("служба: %s\n", service->s_name);

29: printf("tcp-порт: %d\n", ntohs(service->s_port));

31: /* отобразить все псевдонимы, которые имеет данная служба */

32: if (*service->s_aliases) {

33: printf("псевдонимы:");

34: for (ptr = service->s_aliases; *ptr; ptr++)

35: printf(" %s", *ptr);

36: printf("\n");

37: }

38:

39: return 0;

40: }

Ниже показан пример запуска программы. Обратите внимание на то, что она извлекает службы либо по каноническому имени, либо по псевдониму.

$ ./services http

служба: http

tcp-порт: 80

$ ./services source

служба: chargen

tcp-порт: 19

псевдонимы: ttytst source

Глава 18

Время

18.1. Вывод времени и даты

18.1.1. Представление времени

В системах Unix и Linux время отслеживается в секундах до или после начала эпохи, которое определяется как полночь 1 января 1970 года по UTC [148] UTC — Universal Coordinated Time (универсальное синхронизированное время), на которое иногда ошибочно ссылаются как на UCT, приблизительно эквивалентное среднему времени по Гринвичу (GMT) и зулу. Описание всех часовых поясов выходит за рамки материала, рассматриваемого в настоящей книге. . Положительные значения времени относятся к периоду после начала эпохи; отрицательные — до начала эпохи. Для того чтобы обеспечить работу процессов в режиме текущего времени, в Linux, как и во всех остальных версиях Unix, предусмотрен системный вызов time().

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

Интервал:

Закладка:

Сделать


Майкл Джонсон читать все книги автора по порядку

Майкл Джонсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


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


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

Напишите свой комментарий
x