Разработка приложений в среде Linux. Второе издание - Майкл Джонсон
Шрифт:
Интервал:
Закладка:
125
Это иногда называется передачей прав доступа.
126
Несмотря на то что это может показаться очевидным, некоторые протоколы позволяют отправителю использовать любой порядок байтов и в зависимости от получателя преобразовывать информацию в соответствующем порядке. Это приводит к увеличению производительности, если взаимодействуют подобные механизмы, за счет повышения сложности алгоритма.
127
Все процессоры Intel и совместимые с Intel хранят данные с прямым порядком байтов, поэтому здесь получение права преобразования очень важно для корректной работы программ.
128
Информация о IANA доступна по адресу http://www.iana.org.
129
Либо, все чаще и чаще, чтобы скрыть их от широкополосных поставщиков Internet-услуг, которые не хотят разрешить своим рядовым клиентам запускать серверы на домашних машинах.
130
Однако она может оказаться троянским конем, запущенным привилегированным пользователем.
131
Значения для неустановленных IPv4-адресов содержатся в константе INADDR_ANY, которая является 32-битным числом.
132
Эти примеры взяты из документа RFC 1884, в котором определена структура адресации IPv6.
133
Это так называемый неустановленный адрес для IPv6.
134
Если у вас большой опыт в программировании сокетов (или вы сравниваете данную книгу с ее первым изданием), то вы обязательно заметите, что функции, применявшиеся для преобразования имен, значительно изменились. Эти изменения позволяют создавать программы абсолютно независимо от того протокола, который они используют. Теперь гораздо легче разрабатывать программы, работающие как на IPv4-, так и на IPv6-машинах. Они также должны распространяться на остальные протоколы, хотя функция getaddrinfo() в данный момент работает только для IPv4 и IPv6.
135
Адрес обратной связи — это специальный адрес, который позволяет программам взаимодействовать через TCP/IP с приложениями только на одной и той же машине.
136
Для TCP-портов данная комбинация не может использоваться в течение двух минут.
137
Это называется трехсторонним квитированием TCP, которое на самом деле проходит несколько сложнее, чем описано выше.
138
Этот процесс называется сетевой загрузкой.
139
UDP-сокеты, которые имеют постоянные пункты назначения, присвоенные через функцию connect(), иногда называются присоединенными UDP-сокетами.
140
Есть также возможность превратить подключенный сокет в неподключенный с помощью функции connect(), однако эта процедура не стандартизирована. Если вам все же необходимо ее применить, обратитесь к [33].
141
Данные функции могут применяться для передачи данных через любой сокет, и иногда возникают причины для использования их в TCP-соединениях.
142
Возможно также применение системных вызовов sendmsg() и recvmsg(), однако необходимость в этом встречается редко.
143
Полное описание tftp можно найти в [33] и [34].
144
Спецификация tftp-протокола требует, чтобы серверы посылали данные клиенту на номер порта, отличающийся от порта, на котором сервер ожидает новые соединения. При этом нетрудно создать параллельный сервер, поскольку каждый сокет сервера предназначен только для одного клиента.
145
Применение этой структуры делает невозможным расширение данных функций на IPv6 без изменения их интерфейса.
146
Функции, использующие статическую память для сохранения результатов, усложняют построение многопоточных приложений, поскольку в код приложения требуется добавлять блокировки для защиты этих статических буферов.
147
Наверное, не существует IPv6-программ, использующих struct hostaddr, однако они могут это делать. Функции, которые мы обсуждаем здесь, по умолчанию возвращают только информацию IPv4. Мы не будем рассматривать применение этих функций с IPv6.
148
UTC — Universal Coordinated Time (универсальное синхронизированное время), на которое иногда ошибочно ссылаются как на UCT, приблизительно эквивалентное среднему времени по Гринвичу (GMT) и зулу. Описание всех часовых поясов выходит за рамки материала, рассматриваемого в настоящей книге.
149
Мы не рекомендуем применять библиотеку svgalib для графического программирования. Во многих книгах описывается программирование для X Window System, и система X предоставляет более разумный, безопасный и мобильный метод программирования графики. С другой стороны, если вы действительно собираетесь программировать для сервера X Window, то не сможете обойтись без кодирования VC. Таким образом, в любом случае данная глава окажется полезной.
150
Прочтите man-страницы для утилит loadkeys, dumpkeys, keytables, setfont и mapscrn.
151
Данный интерфейс имеет недостаток. Для него необходимо устанавливать некоторые постоянные доли секунды и осуществлять преобразование. Макрос HZ больше не является константой даже на отдельной платформе. Однако, по крайней мере, для архитектуры Intel i86 Линус Торвальдс установил, что все определенные интерфейсы в отношении HZ должны представлять синтетический интерфейс в 100 Гц. Возможно, что в будущем периодические системные часы исчезнут, в таком случае тики станут полностью искусственным понятием.
152
В большинстве остальных систем с виртуальными консолями или терминалами динамическое распределение для них не производится.
153
Отдельные системы (но не Linux) инициируют автоматическое переключение, если вызывается консоль, которая не исполняется в текущий момент.
154
Библиотека curses определена в X/Open. Реализация, которая входит в состав Linux, представляет собой совместимую в данный момент с X/Open XSI Curses версию базового уровня.
155
Эта тема логически относится к главе 20, поскольку она имеет отношение к виртуальным консолям. Однако практический смысл вынуждает поместить этот раздел в данную главу — поскольку, как упоминалось во введении, настоящую книгу можно читать и выборочно.
156
Популярным способом проверки в ранних ядрах Linux было создание последовательности абсолютно случайных байтов и запуск их на выполнение как программы. Кроме того, что таким методом невозможно сделать что-либо полезное, он довольно часто вызывает полную блокировку ядра. Поскольку попытки выполнения совершенно случайных последовательностей кодов не входят в "должностные инструкции" ядра, пользовательские программы не должны вызывать остановку корректной работы ядра. Таким образом, этот прием помогает находить большое число дефектов, которые необходимо устранить.
157
Атака на программное обеспечение приложений сейчас является основным способом распространения вирусов.
158
Системные квоты предотвращают возможность успешности такой атаки.
159
Словарная атака — это довольно прямолинейный метод обнаружения паролей, когда автоматическая программа прогоняет огромный список обычных паролей (таких как слова в словаре) до тех пор, пока один из них не подойдет.
160
ВООТР — это предшественник DHCP, позволяющий компьютерам автоматически узнавать свои IP-адреса при запуске сетевых интерфейсов.
161
Функция alloca() не является стандартным средством языка С, однако компилятор gcc предоставляет alloca() в большинстве поддерживаемых операционных систем. В более старых версиях gcc (до версии 3.3) alloca() не всегда должным образом взаимодействовала с массивами динамических размеров (другое расширение GNU), поэтому примите во внимание, что использовать нужно только одну из версий.
162
В некоторых устаревших версиях библиотеки С вместо этого возвращается -1 (если строка не помещается). Старая версия библиотеки С уже не поддерживается и не используется в защищенных программах, однако на man-странице по функции snprintf() демонстрируется код, обрабатывающий оба варианта.