Разработка приложений в среде 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;
Поделиться:
Популярные книги
Треск штанов
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 3
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ты нас предал
1. Измены. Кантемировы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ледяное проклятье
4. Изгой
Фантастика:
фэнтези
9.20
рейтинг книги
Месть за измену
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мужчина не моей мечты
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Его огонь горит для меня. Том 2
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Возвышение Меркурия. Книга 2
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Камень. Книга шестая
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Идеальный мир для Лекаря 2
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VI
6. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том 11
11. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Мама из другого мира. Делу - время, забавам - час
2. Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
8.83
рейтинг книги
Решала
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00