Новые книги

Признанные во всем мире эксперты по контент-маркетингу Роберт Роуз и Джо Пулицци объединили свои усилия, чтобы дать маркетерам и владельцам компаний ответ на вопрос: куда необходимо направить ресурсы, чтобы разработать действенный план контент-маркетинга, и как заставить его работать на все 100 %. Независимо от того, работаете вы в небольшой компании или в огромной корпорации с многомиллиардными оборотами, их книга вооружит вас теоретическими знаниями и практическими методами организации процесса создания такого контента, который поможет вашему бизнесу не просто достучаться до покупателей, а сформировать армию преданных сторонников.

На русском языке публикуется впервые.
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.

Serial Devices and the login: Prompt

Последовательное оборудование и запрос login:

Когда-то очень распространенным вариантом Unix-систем был такой: одна мощная машина, а вокруг нее много тупых ("dumb") символьных терминалов или модемов. Сейчас такая схема очень редкая, что очень радует. А вот модемы сейчас очень распространены, хотя они используются обычно для сервисов SLIP и PPP (описаны в главе 7 и главе 8). Однако, каждая из этих конфигураций может использовать простую программу, названную getty.

Термин getty сокращение от "get tty" Программа getty открывает последовательное устройство, конфигурирует его, факультативно конфигурирует модем и ждет подключение, которое будет сделано. Активное подключение на последовательном устройстве обычно указывается Data Carrier Detect (DCD) штырьком в последовательном шнуре. Когда происходит соединение, getty выдает приглашение login: и затем вызывает программу login, чтобы обработать вход в систему. Каждый из виртуальных терминалов (устройств /dev/tty1) в Linux имеет свою копию программы getty, запущенную именно для него.

Имеется ряд различных версий getty, каждая разработанная, чтобы удовлетворить некоторые конфигурации лучше, чем другие. Версия getty, которую я опишу, названа mgetty. Она ориентирована на работу с модемами, что и принесло ей солидную популярность, включая поддержку для автоматических факсимильных программ и речевых модемов. При конфигурировании mgetty я сконцентрируюсь на ответах на стандартные вызовы для обмена данными.

Настройка mgetty Daemon

mgetty daemon доступен в исходных кодах с ftp://alpha.greenie.net/pub/mgetty/source и почти во всех дистрибутивах Linux. Демон mgetty отличается от большинства других версий getty, которые были разработаны для Hayes-совместимых модемов. Он поддерживает прямые подключения терминала, но лучше всего подходит для dialup прикладных программ. Вместо DCD-линии для определения входного подключения, эта версия слушает сообщение RING, генерируемое современными модемами, когда они обнаруживают входящее обращение и не сконфигурированы для автоответа.

Главный исполняемый модуль назван /usr/sbin/mgetty , а основной файл настройки /etc/mgetty/mgetty.config. Имеется ряд других программ и файлов конфигурации, которые покрывают другие свойства mgetty .

Для большинства инсталляций настройка сводится к правке /etc/mgetty/mgetty.config и добавлении соответствующих записей в файл /etc/inittab, чтобы выполнять mgetty автоматически.

Пример 4-6 показывает очень простой файл настройки mgetty. Этот пример определяет два последовательных устройства. Первое, /dev/ttyS0, поддерживает Hayes-модем со скоростью 38,400 bps. Второе, /dev/ttyS0, поддерживает терминал прямого доступа VT100 со скоростью 19,200 bps.

Пример 4-6. Простой файл /etc/mgetty/mgetty.config

# mgetty configuration file
#
# this is a sample configuration file, see mgetty.info for details
# comment lines start with a "#", empty lines are ignored
#
# ----- global section -----
# In this section, you put the global defaults, per-port stuff is below
#
# access the modem(s) with 38400 bps
speed 38400
#
# set the global debug level to "4" (default from policy.h)
debug 4
#
# ----- port specific section -----
#
# Here you can put things that are valid only for one line, not the others
#
#
# Hayes modem connected to ttyS0: don't do fax, less logging
#
port ttyS0
  debug 3
  data-only y
#
# direct connection of a VT100 terminal which doesn't like DTR drops
#
port ttyS1
  direct y
  speed 19200
  toggle-dtr n

Файл конфигурации поддерживает глобальные и специфические для порта параметры. В нашем примере мы использовали глобальную опцию, чтобы установить быстродействие в 38,400 bps. Это значение унаследовано портом ttyS0. mgetty применяет именно это значение, если в секции специфической информации для порта не задано другое, как это сделано для ttyS1.

Ключевое слово debug управляет уровнем детализации отчетов mgetty. Ключевое слово data-only в конфигурации ttyS0 предписывает mgetty игнорировать любые свойства факс-модема, чтобы функционировать только как модем данных. Ключеове слово direct в конфигурации ttyS1 предписывает mgetty не делать попытку инициализации модема на этом порте. Наконец, toggle-dtr предписывает mgetty не делать попытку повесить трубку при получении на линии сигнала DTR (Data Terminal Ready).

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

Мы должны добавить две записи в файл /etc/inittab , чтобы активизировать эту конфигурацию. Файл inittab файл конфигурации команды init. Команда init является ответственной за инициализацию системы. Она автоматически выполняет программы при начальной загрузке и перезапускает их, когда они завершаются. Это идеально для целей работы программы getty.

T0:23:respawn:/sbin/mgetty ttyS0
T1:23:respawn:/sbin/mgetty ttyS1

Каждая строка файла /etc/inittab содержит 4 поля, разделяемые двоеточиями. Первое поле является идентификатором. Оно уникально маркирует запись в файле. Традиционно это два символа, но современные версии позволяют четыре. Второе поле содержит список уровней выполнения, на которых эта запись должна быть активна. Уровни выполнения являются средством обеспечения альтернативных конфигураций системы. Они связаны с наборами скриптов в каталогах /etc/rc1.d, /etc/rc2.d и т.д. Третье поле описывает, когда принять меры. Для работы программы getty оно должно быть определено как respawn. Это означает, что при завершении программы, она будет запущена вновь. Имеется еще несколько параметров, но они не важны для наших целей в данный момент. Четвертое поле задает команду, которая будет выполнена. Именно здесь надо определить команду mgetty и все необходимые ее параметры. В нашем простом примере мы запускаем и перезапускаем mgetty, когда система действует на уровнях выполнения 2 или 3 и передаем в качестве аргумента только имя устройства для работы. Команда mgetty подразумевает каталог /dev, так что задавать его явно в имени устройства не нужно.

Эта глава дает только общее представлдение о mgetty. Подробные сведения можно найти в Serial-HOWTO.

После правки файла конфигурации, надо перезапустить процесс init, чтобы изменения вступили в силу. Пошлите сигнал hangup процессу init. Он всегда имеет ID процесса равный единице, так что можно использовать команду:

# kill -HUP 1
Только не забудьте параметр -HUP! Иначе получите останов системы со страшным скрежетом.