Чтение онлайн

на главную - закладки

Жанры

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

Троан Эрик В.

Шрифт:

6: #include <stdio.h>

7: #include <string.h>

8: #include <stdlib.h>

9:

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

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

 12: void usage(void) {

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

 14: "[--ipv4] [--ipv6] [--name] [--udp]\n");

 15: fprintf (stderr, " [--tcp] [--cfg] "

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

 17: exit(1);

 18: }

 19:

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

 21: struct addrinfo * addr, * result;

 22: const char ** ptr;

 23: int rc;

 24: struct addrinfo hints;

 25: const char * serviceName = NULL;

 26: const char * hostName = NULL;

 27:

 28: /*
очищает структуру подсказок */

 29: memset(&hints, 0, sizeof(hints));

 30:

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

 32:

 33: Структура hints, параметры serviceName и hostName будут

 34: заполнены на основе переданных аргументов. */

 35: ptr = argv + 1;

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

 37: if (!strcmp(*ptr, "--ipv4"))

 38: hints.ai_family = PF_INET;

 39: else if (!strcmp(*ptr, "--ipv6"))

 40: hints.ai_family = PF_INET6;

 41: else if (!strcmp(*ptr, "--stream"))

 42: hints.ai_socktype = SOCK_STREAM;

 43: else if (!strcmp(*ptr, "--dgram"))

 44: hints.ai_socktype = SOCK_DGRAM;

 45: else if (!strcmp(*ptr, "--name"))

 46: hints.ai_flags |= AI_CANONNAME;

 47: else if (!strcmp(*ptr, "--cfg"))

 48: hints.ai_flags |= AI_ADDRCONFIG;

 49: else if (!strcmp(*ptr, "--tcp")) {

 50: hints.ai_protocol = IPPROTO_TCP;

 51: } else if (!strcmp(*ptr, "--udp")) {

 52: hints.ai_protocol = IPPROTO_UDP;

 53: } else if (!strcmp(*ptr, "--host")) {

 54: ptr++;

 55: if (!*ptr) usage;

 56: hostName = *ptr;

 57: } else if (!strcmp(*ptr, "--service")) {

 58: ptr++;

 59: if (!*ptr) usage;

 60: serviceName = *ptr;

 61: } else

 62: usage;

 63:

 64: ptr++;

 65: }

 66:

 67: /*
необходимы имена hostName, serviceName или оба */

 68: if (!hostName && !serviceName)

 69: usage;

 70:

 71: if ((rc = getaddrinfo(hostName, serviceName, &hints,

 72: &cresult))) {

 73: fprintf(stderr, "сбой поиска службы: %s\n",

 74: gai_strerror(rc));

 75: return 1;

 76: }

 77:

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

 79: addr = result;

 80: while (addr) {

 81: switch (addr->ai_family) {

 82: case PF_INETs: printf("IPv4");

 83: break;

 84: case PF_INET6: printf("IPv6");

 85: break;

 86: default: printf("(%d) addr->ai_family);

 87: break;

 88: }

 89:

 90: switch (addr->ai_socktype) {

 91: case SOCK_STREAM: printf("\tstream");

 92: break;

 93: case SOCK_DGRAM: printf("\tdgram");

 94: break;

 95: case SOCK_RAW: printf("\traw");

 96: break;

 97: default: printf("\t(%d)

 98: addr->ai_socktype);

 99: break;

100: }

101:

102: if (addr->ai_family == PF_INET ||

103: addr->ai_family == PF_INET6)

104: switch (addr->ai_protocol) {

105: case IPPROTO_TCP: printf("\ttcp");

106: break;

Поделиться:
Популярные книги

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1